我有一个非常大的数据集,其中包含 3 列兴趣、id、house 和 people。每个 id 可以有多个房子,每个房子可以有多个人。我想使用@David Arenburg 在此处共享的内容创建边缘列表在 R 中创建带有其他变量的边缘列表
但是,我遇到的问题是给出的边缘是“a;b”和“b;a”。我只想拥有它们一次。由于 a 和 b 的大集合可以产生数千个 a;b, b;a 组合。
我只想拥有它们一次,因为我想计算人们共享房屋的次数。
给定数据集
id=c(rep("ID1",3), rep("ID2",6), "ID3", rep("ID4",5))
house=c(rep("house1",2), "house2", rep("house3",2), rep("house4",4), "house5", rep("house6",3), "house7", "house8")
people=c("a","b","c","d","e","d","e","d","e","f","g","h","h","h","h")
df1 <- data.frame(id,house, people)
@David Arenburg 的以下代码为我们提供了边缘列表
df1 = setDT(df1)[, if(.N > 1) tstrsplit(combn(as.character(people),
2, paste, collapse = ";"), ";"),
.(id, house)]
结果
id house V1 V2
1: ID1 house1 a b
2: ID2 house3 d e
3: ID2 house4 d e
4: ID2 house4 d d
5: ID2 house4 d e
6: ID2 house4 e d
7: ID2 house4 e e
8: ID2 house4 d e
9: ID4 house6 g h
10: ID4 house6 g h
11: ID4 house6 h h
正如你所看到的,在 V1 和 V2 之间,房子有两个 'd;e','e;d' 我想避免。因此,对于大量数据,这些组合可能在 1000 秒内
谢谢你的帮助