gpt4 book ai didi

r - 在 R 中,如何使用组合检索完整的矩阵?

转载 作者:行者123 更新时间:2023-12-05 00:38:28 27 4
gpt4 key购买 nike

我的问题,删除特定目的,似乎是这样的:
如何转换这样的组合:
第一次使用 combn(letters[1:4], 2)计算组合

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,] "a" "a" "a" "b" "b" "c"
[2,] "b" "c" "d" "c" "d" "d"

使用每一列获取另一个数据框:
   [,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 2 3 4 5 6

获取元素,例如:第一个元素,来自上述数据框的第一列

那么如何将上述数据帧转换为矩阵,例如结果,例如:
   a   b   c  d
a 0 1 2 3
b 1 0 4 5
c 2 4 0 6
d 3 5 6 0

具有相同 col 和 row 名称的元素将具有零值,而其他元素对应于上述值

最佳答案

这是一种有效的方法:

inputs <- letters[1:4]
combs <- combn(inputs, 2)
N <- seq_len(ncol(combs))
nams <- unique(as.vector(combs))
out <- matrix(ncol = length(nams), nrow = length(nams))
out[lower.tri(out)] <- N
out <- t(out)
out[lower.tri(out)] <- N
out <- t(out)
diag(out) <- 0
rownames(out) <- colnames(out) <- inputs

这使:
> out
a b c d
a 0 1 2 3
b 1 0 4 5
c 2 4 0 6
d 3 5 6 0

如果我必须经常这样做,我会将这些函数调用包装到一个函数中。

另一种选择是使用 as.matrix.dist()通过设置 "dist" 为我们进行转换手的对象。使用之前的一些对象:
## Far easier
out2 <- N
class(out2) <- "dist"
attr(out2, "Labels") <- as.character(inputs)
attr(out2, "Size") <- length(inputs)
attr(out2, "Diag") <- attr(out2, "Upper") <- FALSE
out2 <- as.matrix(out2)

这使:
> out2
a b c d
a 0 1 2 3
b 1 0 4 5
c 2 4 0 6
d 3 5 6 0

同样,如果我不得不多次这样做,我会将它包装在一个函数中。

关于r - 在 R 中,如何使用组合检索完整的矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5598000/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com