如何在R中同时统计数据列中的空白值("")和NA的数量
R 同时统计数据列中NA与空白值的行数方法
空白值""属于合法的字符串类型值,不属于R定义的缺失值NA,因此is.na()不会将其判定为TRUE,你可以将两类无效值的判断条件组合后统计:
单列统计方案
直接用逻辑或|组合两个判断条件后传入sum()即可,R中逻辑值TRUE会按1计算、FALSE按0计算,求和结果就是无效值总数量:
sum(is.na(df$ctd_id) | df$ctd_id == "")
按照你给出的示例ctd_id列数据,上述语句返回结果为3,对应第4、5、8行的3条无效记录。
如果你的空白值包含带空格的情况(比如" "这类由多个空格组成的无意义值),可以用trimws()函数先去除两端空格再判断:
sum(is.na(df$ctd_id) | trimws(df$ctd_id) == "")
扩展用法
- 如果你习惯用dplyr处理数据,可以用如下写法:
library(dplyr) df %>% summarise(ctd_id_invalid = sum(is.na(ctd_id) | ctd_id == "")) %>% pull(ctd_id_invalid)
- 如果需要统计整个数据框中存在任意列无效的行数(任意列为NA或空白就算无效行),可以用如下语句:
sum(apply(df, 1, function(row) any(is.na(row) | row == "")))
内容的提问来源于stack exchange,提问作者Judit
相关产品推荐
相关产品推荐

