我遇到了一个似乎微不足道的问题,但我现在无法解决这个问题。我甚至不知道如何正确地制定它,如果你有任何建议,欢迎你。 我有一个data.frame,我想根据两列分组/索引。问题是,我想要分组的行在这些列中不共享相同的值。相反,某些行在一列中具有相同的值,然后其中一些行具有在第二列中具有不同行的公共值(我还希望包括在分组中)。这是一个最小的例子,我希望这会让它更清晰:
day
第1行和第2行共有V1列的值id V1 V2 group_id
1 a c 1
2 a d 1
3 b d 1
4 w y 2
5 w z 2
6 x z 2
。但我不仅想要对它们进行分组,还要对第3行进行分组,第3行是通过V2列的值a
“连接”的。现在,我只能分别对1,2和2,3行进行分组。
对于第二组也是如此,这里我想将值分组为V1中的d
或V2中的w
。 z
和x
无关。
非常感谢任何帮助。
答案 0 :(得分:1)
以下是使用cluster
包中的igraph
函数执行此操作的方法:
library(igraph)
relations <- data.frame(from=df$V1,to=df$V2)
g <- graph_from_data_frame(relations)
group_id <- data.frame(V=names(clusters(g)$membership),
cluster=clusters(g)$membership,stringsAsFactors=FALSE)
left_join(df,group_id,by=c("V1"="V"))
id V1 V2 group_id cluster
1 1 a c 1 1
2 2 a d 1 1
3 3 b d 1 1
4 4 w y 2 2
5 5 w z 2 2
6 6 x z 2 2