检查R中列中的空值或na值

时间:2018-02-27 09:53:30

标签: mysql r dataframe na

我有一个来自大型MySQL表的数据帧“d1”。我需要找到一个未使用的列(只包含NA或空字符串)。 (见问题Find columns with all missing values)。

这似乎工作正常:

allmisscols <- apply(d1,2, function(x)all(is.na(x)));
colswithallmiss <-names(allmisscols[allmisscols>0]);
cat( colswithallmiss,sep="\n");

...

allmisscols <- apply(d1,2, function(x)all(x==''));
colswithallmiss <-names(allmisscols[allmisscols>0]);
cat( colswithallmiss,sep="\n");

...

虽然第二个在列名中也给出“NA”;我不明白为什么。

但是当我尝试将它们结合起来时:

allmisscols <- apply(d1,2, function(x)all(is.na(x)||x=='') );  
colswithallmiss <-names(allmisscols[allmisscols>0]);    
print("the columns with all values missing");    
print(colswithallmiss);

我在结果中看到一个实际上在我的表中包含值的列!

同样如下:

库(stringr); sapply(d1,function(x)all(any(is.na(x)||(str_trim(x)==“”)))))

所以我的问题是:

  1. 为什么我会有这么意想不到的结果?
  2. 如何获取仅包含空OR N / A值的列列表?

1 个答案:

答案 0 :(得分:1)

试试这个:

allmisscols <- sapply(dt, function(x) all(is.na(x) | x == '' ))

注意:您已将OR用作双重&#39; ||&#39;试图让它成为一个单一的。阅读此SO帖子:Boolean operators && and ||