2017-07-13 11 views
7

मैं दो कॉलम के आधार पर समूह अवलोकनों के सूचकांक जेनरेट करना चाहता हूं। लेकिन मैं चाहता हूं कि समूहों को पर्यवेक्षण से बनाया जाए जो साझा करते हैं, कम से कम एक अवलोकन में कॉमन। मैं देख सकता हूं कि अवलोकनों के आधार पर समूह कैसे बनाना है जो दोनों अवलोकन को साझा करते हैं, लेकिन उनमें से केवल एक ही नहीं।कई स्तंभों के आधार पर समूह_इंडिस बनाएं

उदाहरण के लिए, डेटा फ्रेम के साथ:

dt <- data.frame(id=1:10, 
      G1 = c("A","A","B","B","C","C","C","D","E","F"), 
      G2 = c("Z","X","X","Y","W","V","U","s","T","T")) 

मैं एक स्तंभ

1,1,1,1,2,2,2,3,4,4 

मैं dplyr से group_indices साथ की कोशिश की प्राप्त करना चाहते हैं, लेकिन यह कामयाब नहीं किया है।

उत्तर

11

का उपयोग igraph प्राप्त सदस्यता है, तो नाम पर नक्शा:

library(igraph) 

# convert to graph, and get clusters membership ids 
g <- graph_from_data_frame(df1[, c(2, 3, 1)]) 
myGroups <- components(g)$membership 

myGroups 
# A B C D E F Z X Y W V U s T 
# 1 1 2 3 4 4 1 1 1 2 2 2 3 4 

# then map on names 
df1$group <- myGroups[df1$G1] 


df1 
# id G1 G2 group 
# 1 1 A Z  1 
# 2 2 A X  1 
# 3 3 B X  1 
# 4 4 B Y  1 
# 5 5 C W  2 
# 6 6 C V  2 
# 7 7 C U  2 
# 8 8 D s  3 
# 9 9 E T  4 
# 10 10 F T  4 
+0

@akrun धन्यवाद, लेकिन चिंतित है कि यह dplyr नहीं है, और इनपुट बदल जाएगा ... – zx8754

+0

धन्यवाद, इस सवाल का जवाब अच्छा लगता है मेरे लिए, मैं एक dplyr जवाब होगा, लेकिन वैसे भी ठीक है। मैं समझ नहीं पा रहा हूं कि "इनपुट बदल जाएगा" से आपका क्या मतलब है: क्या आपकी विधि अन्य डेटा के साथ काम नहीं करेगी? – Malta

+0

@ माल्टा के रूप में हमारे पास असली डेटा नहीं है, मैं नहीं बता सकता, अगर आपका डेटा आपके उदाहरण के समान है, तो सभी को उम्मीद के अनुसार काम करना चाहिए। – zx8754

संबंधित मुद्दे