在R

时间:2015-06-12 14:24:41

标签: r if-statement na

我有一个由796行和54432列组成的数据框err

我必须检查值不超过20和-20的列。

这是我的方法:

do.call(cbind, (lapply(err, function(x) if((all(x<20)  & all(x>-20))) return(x) )))

我在所有列中都有NA值,之后我

Error in if ((all(x < 20) & all(x > -20))) return(x) :
  missing value where TRUE/FALSE needed

我使用!is.na更新命令:

 do.call(cbind, (lapply(err, function(x) if(!is.na(all(x<20)  & all(x>-20))) return(x) )))

但在这种情况下,会报告所有列,并且过滤器不起作用。

任何帮助?

2 个答案:

答案 0 :(得分:3)

由于我没有示例df检查这是否适合您:

do.call("cbind", lapply(err, function(x) if(min(x, na.rm=T) > -20  & max(x, na.rm=T) < 20) return(x) ))

答案 1 :(得分:1)

使用err[apply(err, 2, function(x) min(x,na.rm=T) > -20 & max(x,na.rm=T) < 20)]

<style>
    .country {display: none;}
</style>