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
我正在创建一个网络,人们可以通过他们喜欢的东西联系在一起。我有一个包含人们喜欢的数据框,我想获得一个数据框,其中每个人都与那些喜欢同一对象的人配对
我有什么
输入:
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