2017-04-07 4 views
0

コマンドラインからargs文字列を取り込んで、列の値に基づいてデータフレームをフィルタリングするRコードがあります。 args文字列には列名が含まれています。今、私はベクトルをループすることによってそれをやっていますが、何かより良い方法があるはずです。このコードを最適化する方法はありますか?Rデータフレームをフィルタリングするコードを最適化する

args = c("col1","col2") 
for(i in args){ 
    df = df[df[,i]==0,] 
} 
+0

目的は何ですかこのコードの?あなたはいくつかの値と意図した出力を与えることができますか?あなたはあなたの既存のコードで期待したものを手に入れますか? – nadizan

+0

どちらの列もゼロの行だけが必要ですか? 'df < - df [df [[args [1]]] == 0] | df [[args [2]]] == 0、] 'これは、2つの論理ベクトルを構築した後の' [.data.frame'を通る単一パスです。 –

答えて

1

私が正しく理解していれば、あなたはargsのすべてが0(またはその他の指定された値)に等しい行を維持したいです。

まずあなたが興味を持っている列のインデックスを取得:

idx <- match(args, colnames(df)) 

その後、あなたは、単に行うことができます。

df <- df[apply(df[, idx], 1, function(x) all(x == 0)), ] 

別の可能性:

df <- df[rowSums(df[, idx] != 0) == 0, ] 
関連する問題