0

R に data.frame があります。3 つの列のいずれかに特定の値を持つ行を選択したいと考えています。私は大きな data.frameを持っていますが、必要なのは以下の例のようなものです:

seller<-c("Mary", "Bill", "Jeff", "Paty", "Paul", "Criss")
c1<-c(1,2,1,1,3,1)
c2<-c(1,1,1,1,2,1)
c3<-c(1,1,3,1,1,1)
data<-data.frame(seller, c1, c2, c3)

>data
       seller c1 c2 c3
   1   Mary  1  1  1
   2   Bill  2  1  1
   3   Jeff  1  1  3
   4   Paty  1  1  1
   5   Paul  3  2  1
   6   Cris  1  1  1

次のように、2 以上の値を持つ行を選択します。

>data
       seller c1 c2 c3
   1   Bill  2  1  1
   2   Jeff  1  1  3
   3   Paul  3  2  1

助けてくれてありがとう!

4

1 に答える 1

1

これが最善の方法かどうかはわかりませんが、次の例のようにand を使用rowSumsしてサブセット化できます。which

data[which(rowSums(data[-1]) > ncol(data[-1])), ]
#   seller c1 c2 c3
# 2   Bill  2  1  1
# 3   Jeff  1  1  3
# 5   Paul  3  2  1

より直接的な代替手段は次のとおりです。

data[which(apply(data[-1], 1, function(x) any(x >= 2))), ]

以前data[-1]は、販売者の名前を削除していました (文字列であるため)。次に、applywith marginが行1ごとに指定された関数を適用します(marginは2ごとに同じことを行います)。関数はで、行ごとにまたはany(x >= 2)を返します。を使用すると、戻り値が であった行をサブセット化できます。TRUEFALSEwhichTRUE

于 2012-07-22T13:37:15.840 に答える