2013-09-03 11 views
6

100桁の列を持つデータセットがあり、100桁のすべての列に1つの条件を満たすデータのみを保持する必要があるとします。複数の列条件に基づく行のフィルタリングR

と仮定、その以下のよう...私だけのCol1の又は2又は3又は4のいずれかは、上記の例では> 0

Col1 Col2 Col3 Col4 
1 1 3 4 
0 0 4 2 
4 3 4 3 
2 1 0 2 
1 2 0 3 
0 0 0 0 

ある行を保持する必要が、最後の行以外のすべての行がそれを行います私は元のデータフレームと同じデータフレームに結果を配置する必要があります。 > 0または私がサブセットを使用することができる列をループするためにlapplyを使用できるかどうかわからない場合。

列インデックスを使用してdf<-subset(df,c(2:100)>0)を行うことはできますか?これは私に正しい結果を与えません。

答えて

11

あなたのdata.frameがDFなら、[を使って作業します。あなたは何百もの列を持っている場合は

> DF[DF[,1]>0 | DF[,2] >0 | DF[,3] >0 | DF[,4] >0, ] 
    Col1 Col2 Col3 Col4 
1 1 1 3 4 
2 0 0 4 2 
3 4 3 4 3 
4 2 1 0 2 
5 1 2 0 3 

あなたは自動的にあなたのdata.frameを持つことが起こるしかし、多くの列を収容するためにdata.table使用することができます

> DF[rowSums(DF)=!0, ] 
    Col1 Col2 Col3 Col4 
1 1 1 3 4 
2 0 0 4 2 
3 4 3 4 3 
4 2 1 0 2 
5 1 2 0 3 
+1

ねえ、私は100の奇数列を持っている場合、私はものを100回入力する必要がありますどのようなJilber ..わからないだろうと?理想的です。私に教えてください – kaos1511

+0

ベクトルがたくさんある場合は、データフレームまたは行列を作成する必要があります。 –

+0

最初の解はすべての実数に対して機能しますが、2番目の解は非負の数に制限されます。 –

2
dat <- read.table(header = TRUE, text = " 
    Col1 Col2 Col3 Col4 
    1 1 3 4 
    0 0 4 2 
    4 3 4 3 
    2 1 0 2 
    1 2 0 3 
    0 0 0 0 
") 

この代替アプローチを使用することができます。ここでは一つの方法ですがdata.tableでこれを行うにはよりエレガントな方法はおそらくあります:

require(data.table) 
dt <- data.table(dat) 

dt[rowSums(dt>0)>0] 

# Col1 Col2 Col3 Col4 
# 1: 1 1 3 4 
# 2: 0 0 4 2 
# 3: 4 3 4 3 
# 4: 2 1 0 2 
# 5: 1 2 0 3 
関連する問題