按因子分组统计NA值:mtcars数据集的dplyr实现报错问题
解决dplyr分组统计NA值的问题
嘿,我来帮你搞定这个dplyr的错误问题~
你遇到的Error in n(is.na(carb)) : unused argument (is.na(carb)),原因是**n()函数在dplyr里是用来统计每组的总行数的,它不需要任何参数**,所以你不能给它传is.na(carb)这样的参数。
想要实现「按mpg(作为因子)分组,统计每组carb列的NA值数量」的需求,我们需要用sum()配合is.na()来完成,再结合正确的聚合函数summarise(而不是你用的select,select只是用来选择列,不能做聚合统计)。
正确代码示例
library(dplyr) # 显式将mpg转换为因子后分组,统计每组carb的NA数量 mtcars %>% group_by(mpg = as.factor(mpg)) %>% summarise(count(NA_in_column_carb) = sum(is.na(carb)))
代码解释
group_by(mpg = as.factor(mpg)):把mpg列转换为因子类型,并以此作为分组依据,完全符合你「按mpg作为因子分组」的要求;summarise(count(NA_in_column_carb) = sum(is.na(carb))):is.na(carb)会生成一个逻辑向量,carb列的NA值对应TRUE,非NA值对应FALSE;sum()会自动把TRUE视为1、FALSE视为0,求和后就得到了该组中carb列的NA总数;- 最终生成的统计列名用了你期望的
count(NA_in_column_carb),也可以改成其他你喜欢的命名。
因为mtcars数据集的carb列本身没有NA值,所以运行结果会和你期望的一样,所有分组的统计值都是0。
如果你不想在分组时就转换因子,也可以先分组统计,最后再把mpg转成因子:
mtcars %>% group_by(mpg) %>% summarise(count(NA_in_column_carb) = sum(is.na(carb))) %>% mutate(mpg = as.factor(mpg))
内容的提问来源于stack exchange,提问作者SecretIndividual
相关产品推荐
相关产品推荐

