我有一个具有一些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])))
是否有更可读(和简洁)的方法来实现这一点,而不是将每个列条件包围在&登录?
感谢您的帮助......
答案 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]))