2017-05-23 10 views
2

読んでいただきありがとうございます。私が確信していることに対する謝罪は簡単な作業です。 (編集:比較に含まれるではないが追加されました余分な列)私は列の列dcのグループとcdのグループを比較したい2つの列のグループを比較し、インデックスの一致を返します。R

b = c(5, 6, 7, 8, 10, 11) 
c = c('david','alan','pete', 'ben', 'richard', 'edd') 
d = c('alex','edd','ben','pete','raymond', 'alan') 
df = data.frame(b, c, d) 
df 
    b  c  d 
1 5 david alex 
2 6 alan  edd 
3 7 pete  ben 
4 8  ben pete 
5 10 richard raymond 
6 11  edd alan 

は、私がデータフレームを持っています。つまり、ある行に対して、cdの合計値と、他のすべての行の合計値をdcと比較したいと思います。

これらの試合は私が好ましくリストのリストとして、一致した行のインデックスを返したい

(文字または整数である可能性のいずれかの値に注意してください)。列cまたはdの値を参照せずにインデックスにアクセスできる必要があります。

I.e.上記のデータフレームのために、私の予想出力は次のようになります。

c(c(2, 6), c(3, 4)) 
((2,6), (3,4)) 

として:

Row 2: (c + d == alan + edd) = row 6: (d + c == edd + alan) 
Row 3: (c + d == pete + ben) = row 4: (d + c == ben + pete) 

私はmatchmeltを使用して2つの別々の列の一致ケースを決定する方法を理解するが、それらは互いに結合されていない場合可能なすべての行の組み合わせに対して反復処理を行います。

は、私のような何かを想像:

lapply(1:6, function(x), ifelse((df$a & df$b) == (df$b & df$a), index(x), 0)) 

をしかし、明らかにそれは間違っていると動作しません。

私は以下の質問を参照しましたが、回答をまとめることができませんでした。私はどこから始めるべきか分かりません。

Matching multiple columns on different data frames and getting other column as result

match two columns with two other columns

Comparing two columns in a data frame across many rows

R Comparing each value of all pairs of columns

どのように私は上記を達成することができますか?

答えて

4

あなたはこのようなことをすることができます。 dfの列から形成された一意のソートされた文字列に従って行インデックス1:nrow(df)を分割します。ソートにより、A,BB,Aが同じように扱われます。

duplist <- split(1:nrow(df),apply(df,1,function(r) paste(sort(r),collapse=" "))) 

duplist 
$`alan edd` 
[1] 2 6 

$`alex david` 
[1] 1 

$`ben pete` 
[1] 3 4 

$`raymond richard` 
[1] 5 
+0

カラム名の指定方法は?私。異なる名前の2つの列がある場合 – Chuck

+0

dfが名前の列のみで構成されている場合、これは任意の数の列で機能します。列の名前は重要ではありません。あるいは、特定の列のペアだけを比較したい場合は、df [、c( "e"、 "f")] 'を' df'に置き換えることができます。 –

+0

理想的には、1つの行だけが返されたときではなく、一致するペアを保持したいと思います。長さ1の要素を自動的に削除することは可能ですか? – Chuck

関連する問題