2016-11-08 14 views
2

これが既に要求されていても謝罪しますが、検索して何をしようとしているのか正確な例が見つかりませんでした。私は5つの列に一致する数値を持つ行を除外するデータフレームをサブセット化しようとしています。私が困っ方法を考え出すを抱えているR複数の列の値が一致しない行をサブセット化する

Row A B C D E 
1 1 1 2 3 1 
2 4 1 2 3 5 
3 2 2 2 2 2 
4 5 5 5 5 5 
5 4 4 2 3 4 
6 2 1 3 5 2 
7 3 3 3 3 3 
8 3 2 5 3 3 
9 2 1 2 2 4 
10 3 3 3 2 3 

:2、5:6、および8時10たとえば、次のデータフレーム、DFのために、私は行のみ1で新しいデータフレームを返すようにしたいと思います2つ以上の列に対してこれを行う。私は以下を試してみて、彼らが正しくないことを知っています。

df2 <- df[!duplicated(df, c("A", "B", "C", "D", "E"))] 

df2 <- df[df$A==df$B==df$C==df$D==df$E,] 

事前に感謝します。

答えて

1

データフレームは通常、行単位ではなく列単位で処理されるため、duplicatedの試行は機能しません。そして、==は、==がバイナリ演算子であるため、がTRUEまたはFALSEになり、df$CがTRUEまたはFALSEの場合は(df$A == df$B) == df$C(暗黙のかっこ)がテストされるため、==は機能しません。

applyは、それぞれ行の機能を実行するための良い方法です。関数を実行するためにデータフレームを行列に変換しますが、この場合、AからEまでの細かい列はすべて数値です。ここでは一つの方法です:

df[apply(df[, -1], 1, function(x) length(unique(x))) > 1, ] 
# Row A B C D E 
# 1 1 1 1 2 3 1 
# 2 2 4 1 2 3 5 
# 5 5 4 4 2 3 4 
# 6 6 2 1 3 5 2 
# 8 8 3 2 5 3 3 
# 9 9 2 1 2 2 4 
# 10 10 3 3 3 2 3 

あなたは同じで、すべての要素をテストするためにapplyに異なる機能のすべての種類を思い付くことができます。

実際にはという名前の列があると仮定しました。そうでない場合は、上記のコードに-1を入れないでください。


このデータを使用して、再現性よくdput()と共有します。

df = structure(list(Row = 1:10, A = c(1L, 4L, 2L, 5L, 4L, 2L, 3L, 
3L, 2L, 3L), B = c(1L, 1L, 2L, 5L, 4L, 1L, 3L, 2L, 1L, 3L), C = c(2L, 
2L, 2L, 5L, 2L, 3L, 3L, 5L, 2L, 3L), D = c(3L, 3L, 2L, 5L, 3L, 
5L, 3L, 3L, 2L, 2L), E = c(1L, 5L, 2L, 5L, 4L, 2L, 3L, 3L, 4L, 
3L)), .Names = c("Row", "A", "B", "C", "D", "E"), class = "data.frame", row.names = c(NA, 
-10L)) 
+0

ありがとうございました!これはまさに私が必要としたものでした。 –

1

あなたは、単に単一の列に対してすべての列を比較し、

df[rowSums(df[-1] == df[, 1]) < (ncol(df) - 1), ] 
# A B C D E 
# 1 1 1 2 3 1 
# 2 4 1 2 3 5 
# 5 4 4 2 3 4 
# 6 2 1 3 5 2 
# 8 3 2 5 3 3 
# 9 2 1 2 2 4 
# 10 3 3 3 2 3 

それともdf[rowSums(df == df[, 1]) < (ncol(df)), ]


または同様に、すべて同じかどうかを確認することができます、あなたはすべての行列変換を回避することができます一緒にして組み合わせるReducelapply

df[!Reduce("&" , lapply(df, `==`, df[, 1])), ] 
# A B C D E 
# 1 1 1 2 3 1 
# 2 4 1 2 3 5 
# 5 4 4 2 3 4 
# 6 2 1 3 5 2 
# 8 3 2 5 3 3 
# 9 2 1 2 2 4 
# 10 3 3 3 2 3 
関連する問題