6

100 個の奇数列を持つデータセットがあり、100 個の列すべてに適用される 1 つの条件を満たす行のみをデータ内に保持する必要があるとします。これを行うにはどうすればよいですか?

以下のようなものだとします... 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

上記の例では、最後の行を除いてすべての行が作成されます..結果を元と同じデータフレームに配置する必要があります。lapply を使用して >0 の列をループできるかどうか、またはサブセットを使用できるかどうかはわかりません。

列インデックスを使用してdf<-subset(df,c(2:100)>0). これでは正しい結果が得られません。

4

2 に答える 2

10

あなたの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

何百もの列がある場合は、この代替アプローチを使用できます

> 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
于 2013-09-03T10:15:50.047 に答える
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 を使用して、data.frame にたまたま含まれる列の数に自動的に対応できます。これは 1 つの方法ですが、おそらく 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
于 2013-09-03T12:00:41.547 に答える