我正在寻找一种快速且可扩展的解决方案,以将海量数据帧从长格式强制转换为R中的边缘列表。
请考虑以下data.frame:
df1 <- data.frame(ID=c("A1", "A1", "A1", "B1", "B1", "B1"),
score=c(3,4,5,3,6,5))
> df1
ID score
1 A1 3
2 A1 4
3 A1 5
4 B1 3
5 B1 6
6 B1 5
结果应如下所示。请注意,score
中的元素如果由相同的ID
持有,则将成为具有联系的节点。
> el
X Y
1 3 4
2 3 5
3 4 5
4 3 6
5 6 5
原始的df1
大约有3000万个观察值,因此需要经常计算边缘列表。
答案 0 :(得分:2)
data.table
是流行的(高效的)“大数据”工具:
library('data.table')
DT <- as.data.table(df1)
unique(DT[,as.data.frame(t(combn(score,2))), by = "ID"][,ID := NULL,])
# V1 V2
# 1: 3 4
# 2: 3 5
# 3: 4 5
# 4: 3 6
# 5: 6 5