2016-07-08 6 views
-1

VarAとVarB colomnは完全に同一線上の変数の出力です。変数をグループに入れ、VarBに基づいて重複した組み合わせを削除したいとします(例:D、Aは相互に関連しています。最終出力における2つの組合せ)のいずれR - 相関によってグループ化し、重複を削除してフレームを元に戻しますか?

VarA <- c('G','D','A','X','E','D','A','X','E','Z','Q') 
VarB <- c('H','D','D','E','E','A','A','X','X','Z','Z') 
corrout <- as.data.frame(cbind(VarA,VarB)) 

VarA  VarB 
G   H 
D   D 
A   D 
X   E 
E   E 
D   A 
A   A 
X   X 
E   X 
Z   Z 
Q   Z 

以下に所望VARBに基づいて示されており、2つの複製が出力A、A及びX、その既に上記のようにVARBのX組合せで除去されます。

DESIRED OUTPUT 

GROUP1 - G 
GROUP2 - D,A 
GROUP3 - X,E 
GROUP4 - Z,Q 

誰かがこのための簡単なfuntionで私を助けることができるだろう!おかげでたくさんの..

+0

'library(igraph); g < - graph_from_data_frame(corrout);クラスタ(g) 'はほとんどあなたをそこに連れて来る – user20650

答えて

1

は、我々は

library(data.table) 
unique(setDT(corrout)[, toString(unique(VarA)) , VarB], by = "V1")[, 
     VarB := paste0("Group", 1:.N)][] 
#  VarB V1 
# 1: Group1 G 
# 2: Group2 D, A 
# 3: Group3 X, E 
# 4: Group4 Z, Q 
0

続いて作品を試すことができます。行の

> c2 = corrout[corrout$VarA != corrout$VarB,] 
> c2 
    VarA VarB 
1  G H 
3  A D 
4  X E 
6  D A 
9  E X 
11 Q Z 

ソート変数:

> c3 = data.frame(t(apply(c2, 1, function(x) sort(x)))) 
> c3 
    X1 X2 
1 G H 
3 A D 
4 E X 
6 A D 
9 E X 
11 Q Z 

すると、両方の変数が同じである行を削除します

重複を削除する:

> c3[!duplicated(c3), ] 
    X1 X2 
1 G H 
3 A D 
4 E X 
11 Q Z 
+0

複数の変数との相関があるとき、これは問題の権利ですか?例えば、AはD、P、Q、R、Sと相関関係があるとします。この場合、グループ化する必要があります。データフレームの結果は、私が推測する問題です。 – Sam

+0

corrout data.frameのサイズは問題になりません。あなたはさらに列を持つことさえできます。 – rnso

関連する問題