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

按年份统计数据集缺失占比的R语言循环实现技术问询

按年份统计数据集整体缺失数据占比的解决方案

嘿,我来帮你搞定这个按年份统计整体缺失占比的需求!首先明确下:你要的是每年中存在缺失值的行数占当年总行数的比例,刚好你已经有了ds$missing标记每行是否含缺失,还有df$year的年份字段,那我们可以用两种方式实现:

方法一:循环实现(贴合你现有的代码风格)

既然你之前习惯用循环处理缺失值统计,那这个版本应该对你来说很顺手:

# 提取所有不重复的年份值
unique_years <- unique(df$year)
# 初始化存储结果的向量
yearly_missing_ratio <- c()

# 遍历每个年份
for (year in unique_years) {
  # 筛选出当前年份的观测行
  year_data <- ds[df$year == year, ]
  # 统计当前年份的总行数
  total <- nrow(year_data)
  # 统计当前年份有缺失的行数(利用已有的missing标记)
  missing_count <- sum(ds$missing[df$year == year])
  # 计算占比并赋值,用年份作为向量名称
  yearly_missing_ratio[as.character(year)] <- missing_count / total
}

# 查看最终结果
print(yearly_missing_ratio)

关键步骤解释:

  • 先获取唯一年份列表,避免重复处理相同年份
  • 每次循环只聚焦当前年份的数据,统计缺失行占比
  • 结果用年份字符串命名,能直观看到各年份的缺失比例

方法二:用dplyr快速分组统计(更高效简洁)

如果你的数据集比较大,循环的效率可能不够,用dplyr的分组统计会更优雅,而且输出结果是规整的数据框,方便后续分析:

# 先安装并加载dplyr(如果还没安装的话)
# install.packages("dplyr")
library(dplyr)

# 把年份字段合并到ds数据集(如果df和ds是同一个数据集,直接用ds$year即可)
ds <- ds %>% mutate(year = df$year)

# 按年份分组计算缺失占比
yearly_missing_summary <- ds %>%
  group_by(year) %>%
  summarise(
    当年总行数 = n(),
    缺失行数 = sum(missing),
    整体缺失占比 = 缺失行数 / 当年总行数
  )

# 查看结果
print(yearly_missing_summary)

这个方法会直接生成一个包含年份、总行数、缺失行数、缺失占比的数据框,比循环的向量结果更易读,也方便后续可视化或进一步分析。

小补充:如果ds$missing还没生成?

要是你还没生成这个标记列,其实可以用一行代码快速搞定:

ds$missing <- rowSums(is.na(ds)) > 0

它会逐行统计缺失值的数量,只要数量大于0就标记为TRUE,完美替代手动标记~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:10:18