R-从data.frame中以长格式制作边缘列表的最快方法

时间:2018-11-18 04:29:18

标签: r dataframe combinations

我正在寻找一种快速且可扩展的解决方案,以将海量数据帧从长格式强制转换为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万个观察值,因此需要经常计算边缘列表。

1 个答案:

答案 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