我有一个数据框,其中包含许多变量和观察值的百分比值,如下所示:
obs <- data.frame(Site = c("A", "B", "C"), X = c(11, 22, 33), Y = c(44, 55, 66), Z = c(77, 88, 99))
我需要将此数据准备为网络分析的边缘列表,其中“站点”作为节点,其余变量作为边缘。结果应如下所示:
Node1 Node2 Weight Type
A B 33 X
A C 44 X
...
B C 187 Z
因此,对于“权重”,我们正在计算所有可能对的总和,并分别针对每一列(以“类型”结尾)。
我想这个问题的答案必须apply
在combn
表达式上使用,就像在这里Applying combn() function to data frame一样,但我还没有完全解决。
我可以通过手动获取“站点”的组合来完成这一切
sites <- combn(obs$Site, 2)
然后像这样的各个列
combA <- combn(obs$A, 2, function(x) sum(x)
并将这些数据集绑定在一起,但这显然很快就会变得烦人。
我试图像这样一次性完成所有变量列
b <- apply(newdf[, -1], 1, function(x){
sum(utils::combn(x, 2))
}
)
但这有问题。有人可以帮忙吗?