作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个像
df <- data.frame(group= c("a","a","b","b","b","c"),
person = c("Tom","Jerry","Tom","Anna","Sam","Nic"), stringsAsFactors = FALSE)
df
group person
1 a Tom
2 a Jerry
3 b Tom
4 b Anna
5 b Sam
6 c Nic
df.output
pers1 pers2 person_in_common
1 Anna Jerry Tom
2 Jerry Sam Tom
3 Sam Tom Anna
4 Anna Tom Sam
6 Anna Sam Tom
最佳答案
这是一个使用 igraph
包裹。基本思想是创建一个图,然后为每个节点提取两个相邻的节点。
library(igraph)
X1 = split(df$person, df$group)
X2 = X1[lengths(X1) >= 2]
dat = data.frame(do.call(rbind, unlist(lapply(X2, function(x)
combn(x, 2, sort, FALSE)), recursive = FALSE)))
g = graph.data.frame(dat, directed = FALSE)
mydf = data.frame(as.matrix(get.adjacency(g)))
mydf = mydf[colSums(mydf) > 1]
ANS = sapply(mydf, function(x) t(combn(row.names(mydf)[which(x == 1)], 2)))
do.call(rbind, lapply(names(ANS), function(nm) data.frame(ANS[[nm]], nm)))
# X1 X2 nm
#1 Sam Tom Anna
#2 Anna Tom Sam
#3 Jerry Anna Tom
#4 Jerry Sam Tom
#5 Anna Sam Tom
mynames = unique(do.call(c, X2))
do.call(rbind,
lapply(mynames, function(x){
L = V(g)$name[unlist(adjacent_vertices(graph = g, v = x))]
if(length(L) >= 2){
setNames(data.frame(t(combn(L, 2)), x), c("P1", "P2", "P3"))
}else{
setNames(data.frame(NA, NA, x), c("P1", "P2", "P3"))
}
}))
# P1 P2 P3
#1 Jerry Anna Tom
#2 Jerry Sam Tom
#3 Anna Sam Tom
#4 <NA> <NA> Jerry
#5 Sam Tom Anna
#6 Anna Tom Sam
关于r - 在大数据集上找到共同的第三个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47557369/
所以,我有一个类似于 this one 的用例,但我觉得有一些额外的细节值得提出一个新问题。 ( related questions ,供引用) 我正在编写一个实现 a cycle 的数据结构.基本设
我正在使用 Django 编写一个社交网络应用程序,需要实现类似于 Facebook“Mutual Friends”概念的功能。我有一个像这样的简单模型: class Friend(models.Mo
我有一个 iOS 应用程序,用户可以在其中使用 Facebook 登录并授予 user_friends 权限。从 Graph API 2.0 开始,Facebook 声称你无法获取两个人之间所有的共同
我想知道将来对我来说最简单的方法是什么,可以使查询既有效又不那么复杂。 我应该像这样保存双向关系吗 from_id=1, to_id=2from_id=2, to_id=1 或者只创建一个唯一的行 f
我是一名优秀的程序员,十分优秀!