压缩代码:检查多个列是否遵循R中数据框中的布尔值

时间:2015-03-15 07:55:08

标签: r boolean dataframe

我有一个具有一些NA值的数据框(df)。我想提取多列中存在NA值的行(在下面的示例中,我对第12-20列执行此操作):

NArows = which(is.na(df[,20])&is.na(df[,19]&is.na(df[,18])&is.na(df[,17])&is.na(df[,16])&is.na(df[,15])&is.na(df[,14])&is.na(df[,13])&is.na(df[,12])))

是否有更可读(和简洁)的方法来实现这一点,而不是将每个列条件包围在&登录?

感谢您的帮助......

1 个答案:

答案 0 :(得分:-1)

试试这个:

cols <- 12:20
NArows <- which(apply(df[cols],1,function(y)sum(!is.na(y))==0))

它将你的df切割成你关心的'cols',然后将每个行应用于测试is.na(),如果它发现那些cols中的所有值都是NA,则将该行号添加到NArows。

或者根据david arenburg的回答,这会标记任何有2个或更多NA的行:

NArows <- which(rowSums(is.na(df[12:20])) > 1L)

使其更符合您的要求,这只标记所有都是NA的行:

cols <- 12:20
NArows <- which(rowSums(is.na(df[cols])) == ncol(df[cols]))