R:创建数据框,每个节点的边缘都喜欢相同的对象

R: create data frame with the edges of each node liking the same object

我正在创建一个网络,人们可以通过他们喜欢的东西联系在一起。我有一个包含人们喜欢的数据框,我想获得一个数据框,其中每个人都与那些喜欢同一对象的人配对

我有什么

输入:

object   person
 1        1
 1        2 
 1        3
 2        2
 2        3
 3        3
 4        1
 4        4

我想得到什么

结果:

person1 person2   object
1       2         1
1       3         1
2       3         1
2       3         2
1       4         4

这里有一个data.table解决方案

示例数据

library( data.table )
DT <- fread("object   person
1        1
1        2 
1        3
2        2
2        3
3        3
4        1
4        4")

代码

DT[, { #suppress immediate output by using {}
       if( length(person) > 1) {     #combinations only possible for >1 persons
         temp <-  combn( person, 2)  #get all possible 2-person combinations
         list( person1 = temp[1,],   #add combinations to named list
               person2 = temp[2,] )  
         } #end if
     }, #now present the finalt output (i.e. the named list) , 
   by = object ] #for each object

输出

#    object person1 person2
# 1:      1       1       2
# 2:      1       1       3
# 3:      1       2       3
# 4:      2       2       3
# 5:      4       1       4