2017-07-13 18 views
7

2つの列に基づいて観測値をグループ化するためのインデックスを生成したいと考えています。しかし、私はグループを共有して観察し、少なくとも1つをコモンズで観察したいと思っています。私は、両方の観測を共通の観測値に基づいてグループ化する方法を見ることができますが、どちらか一方だけではありません。データフレームで例えば複数の列に基づいてgroup_indicesを作成する

、:

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 GETメンバーシップを使用:

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

@Malta私たちは実際のデータを持っていないので、あなたのデータがあなたの例に似ていれば、すべてが期待どおりに動作するはずです。 – zx8754

関連する問題