You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言:统计数据框各列中NA与-99的出现次数

问题分析

你写的sum(-99)是直接对常量-99求和,没有做元素级别的匹配判断,所以得到的结果完全不符合预期。正确的逻辑应该是先判断每列的每个元素是否等于-99,再对生成的逻辑值(TRUE记为1,FALSE记为0)求和。

另外要注意:你的数据框中dogs列因混合了数值和字符,R自动将其转为字符型,所以这里的-99实际是字符串"-99";cats列是纯字符型,不存在-99。


解决方案

1. 单独统计每列的-99出现次数

针对字符型列的"-99"进行判断,同时用na.rm = TRUE排除NA对求和的干扰:

df %>% summarise_all(~ sum(. == "-99", na.rm = TRUE))

运行结果:

cats dogs
    0    2

2. 同时统计NA和-99的出现次数

如果想一次性得到每列的两种统计结果,可以结合列表返回:

df %>% 
  summarise_all(list(
    na_count = ~ sum(is.na(.)),
    minus99_count = ~ sum(. == "-99", na.rm = TRUE)
  ))

运行结果:

cats_na_count cats_minus99_count dogs_na_count dogs_minus99_count
1             2                  0             1                  2

3. 针对数值型列的补充

如果你的数据框中有纯数值型的列(其中的-99是数值而非字符串),只需将判断条件改为sum(. == -99, na.rm = TRUE)即可。


内容的提问来源于stack exchange,提问作者nrcombs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:50:37