分为两列和R中的级联

时间:2017-04-18 20:58:46

标签: r data.table dplyr

我遇到了一个似乎微不足道的问题,但我现在无法解决这个问题。我甚至不知道如何正确地制定它,如果你有任何建议,欢迎你。 我有一个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中的wzx无关。

非常感谢任何帮助。

1 个答案:

答案 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