为何nrow(complete.cases(source))返回NULL?如何统计无NA/NaN的行数?
问题原因分析
嘿,这个问题我碰到过好多次,咱们一步步拆解:
首先得明确两个函数的作用边界:
complete.cases(source)返回的是一个一维逻辑向量,长度和原数据框的行数一致——每个元素为TRUE代表对应行没有任何NA/NaN,FALSE则表示该行存在缺失值。nrow()是专门用来统计二维数据结构(比如数据框、矩阵)行数的工具,它没法处理一维的逻辑向量。当你把逻辑向量传给nrow()时,它找不到可统计的二维结构,自然就返回NULL了。
你可以用str(complete.cases(source))验证这点,输出会显示这是一个logi类型的向量,而非数据框或矩阵。
正确统计无缺失值行数的方法
这里有几种简单高效的方案,你可以根据自己的使用习惯选:
方法1:直接求和逻辑向量(最推荐)
在R的算术运算里,TRUE会被自动转成1,FALSE转成0,直接用sum()就能统计出无缺失值的行数:
sum(complete.cases(source))
方法2:筛选完整行后统计行数
先通过逻辑向量筛选出所有无缺失值的行,得到一个子数据框,再用nrow()统计它的行数:
nrow(source[complete.cases(source), ])
注意这里的逗号不能丢,它表示保留原数据框的所有列。
方法3:用tidyverse工具(如果你习惯dplyr)
如果你日常用dplyr这类tidyverse包,可以这样写:
library(dplyr) # 方式一:检查所有列无缺失 source %>% filter(if_all(everything(), ~ !is.na(.x))) %>% nrow() # 方式二:直接复用complete.cases source %>% filter(complete.cases(.)) %>% nrow()
内容的提问来源于stack exchange,提问作者SnakesCantWearBoots
相关产品推荐
相关产品推荐

