2017-04-18 30 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