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

如何统计R语言数据框中各月份的null/缺失值数量

R语言日度站点数据月度缺失值统计方案

针对日度站点观测数据按月统计指定字段缺失值、筛选合格月份的需求,原代码存在3个容易导致结果错误的问题:

  • 未加入年份维度分组:仅提取月份数字会将不同年份的同序号月份数据合并,统计结果完全失真
  • 列匹配逻辑硬编码:在管道流程中直接调用原始数据框名索引列,若前置步骤存在列增删操作会出现匹配错误
  • 缺失占比计算逻辑有误:原代码中mean(Mis)输出的是单日平均缺失字段个数,不是缺失值占当月应测总数据量的比例,无法直接作为质量判定依据

修正后的可直接运行代码如下,默认统计所有列名带"C"的观测字段:

library(dplyr)
library(lubridate)

# 分年月统计缺失值
month_missing_stat <- CUM00078310_df %>%
  mutate(
    Year = year(Date),
    Month = month(Date),
    # 统计每日C类字段的缺失数量
    daily_mis = rowSums(is.na(pick(contains("C"))))
  ) %>%
  group_by(Year, Month) %>%
  summarise(
    # 当月缺失值总个数
    sum_missing = sum(daily_mis),
    # 当月应观测总数据量=当月有效观测天数*参与统计的C类字段数
    total_expected = n() * ncol(pick(contains("C"))),
    # 真实缺失率
    missing_percent = sum_missing / total_expected,
    .groups = "drop"
  )

完成统计后可直接按阈值剔除低质量月份,示例为保留缺失率低于20%的月份,可根据研究需求调整阈值:

# 筛选符合质量要求的月份
valid_months <- month_missing_stat %>%
  filter(missing_percent < 0.2)

# 过滤原始数据,仅保留合格月份的观测记录
cleaned_df <- CUM00078310_df %>%
  mutate(Year = year(Date), Month = month(Date)) %>%
  inner_join(valid_months %>% select(Year, Month), by = c("Year", "Month"))

注意:运行前请确认Date列已通过ymd()等函数转换为R标准日期格式,否则年、月字段提取会出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:33:20