使用group_by()与summarise()返回NA值的问题排查
分组计算均值和标准差出现NA值的原因分析
给定信息
数据集
#coverboard Period EEM.or.NCOS Habitat Date Species Count 2020-2022 EEM CSS 100 1/1/20 Alligator.Lizard 0 2020-2022 EEM TS 200 1/1/20 Garter.Snake 1 2020-2022 NCOS TS NA 1/1/20 Field.Mouse 0 2020-2022 NCOS AR 150 1/1/20 Field.Mouse 2
注:用户确认数据集无NA值,所有Count均为整数。
运行代码
coverboard_loc <- coverboard %>% group_by(EEM.or.NCOS, Species) %>% summarise(Encounter_mean = mean(count), dev = sd(count))
部分输出结果
EEM Ringneck.Snake 0.0058139535 EEM Slender.Salamander 0.0170542636 EEM Western.Fence.Lizard 0.2534883721 EEM Western.Skink NA Ellwood Alligator.Lizard 0.0000000000 Ellwood California.Vole 0.0113636364
问题原因排查
- 分组样本量为1:这是最可能的原因。
sd()函数计算标准差时,需要至少2个观测值(分母为n-1,当n=1时分母为0,无法计算),此时会返回NA。比如EEM Western.Skink分组,若整个数据集中该分组仅存在1条记录,那么dev(标准差)列会显示NA,而Encounter_mean(均值)应为该记录的Count值,可能是输出格式问题导致看起来均值为NA。 - 列名大小写不匹配:代码中使用的是小写
count,但数据集列名是大写Count。R默认区分大小写,若实际数据集列名未转换为小写,会导致引用错误,但此情况会导致所有计算结果为NA,与用户部分正常结果不符,可能性较低。 - 隐形异常数据:虽用户确认无NA,但可能存在隐形空值(如空字符串被识别为数值NA)或分组内所有
Count值完全相同且样本量不足,不过前者会影响均值计算,后者仅影响标准差。
内容的提问来源于stack exchange,提问作者Kyra Sullivan
相关产品推荐
相关产品推荐

