2017-04-18 41 views
0

我被困在似乎微不足道的问题上,但我现在无法弄清楚它。我甚至不知道如何正确制定它,如果您有任何建议,欢迎您。 我有一个data.frame,我想分组/索引取决于两列。事情是,我想分组的行不会在这些列中共享相同的值。相反,某些行在一列中具有相同的值,然后其中一些行与第二列中的不同行具有共同的值(我也希望将其包含在分组中)。下面是一个小例子,我希望这使得它更清楚一点:由两列和R中的级别的联合组成

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 

行1和2有共同列V1的价值a。但我不仅要对它们进行分组,而且还要通过列V2的值d“连接”第3行。现在,我只能将行1,2和2,3分开分组。

对于第二组也是如此,在这里我想将V2中的w或V2中的z分组。 xy是无关紧要的。

任何帮助,高度赞赏。

+2

看看这个包的igraph和连接的部件,大概。 – Frank

+0

如果你有'V1 = b'和'V2 = z'的另一行,那么正确的分组分类是什么? – konvas

回答

0

你的意思是将行与V1和V2的组合?如果是这样的:

library(dplyr) 
df <- df %>% group_by(interaction(V1,V2)) 
+0

感谢您的快速响应。不幸的是,这不是我想要的,因为“互动”仅结合变量的因子水平。我现在调整了这个例子,希望现在更清楚。 –

0

这里是你如何能做到这一点从igraphcluster功能:

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