优化代码以过滤R数据帧

时间:2017-04-07 23:30:42

标签: r dataframe

我有一些R代码从命令行接收args字符串,然后根据列中的值过滤数据帧; args字符串包含列名。现在我通过循环遍历向量来做这件事,但有些东西告诉我必须有更好的方法。有没有办法优化这段代码?

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

1 个答案:

答案 0 :(得分: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, ]