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

如何用R编写通用脚本统计多数据集的缺失值(NA/999/0)

通用R脚本:统计多类型缺失值(NA/999/0)

需求回顾

需要编写可复用的脚本,自动统计数据集中以NA、999、0形式存在的缺失值,无需手动指定列名,适配多数据集和大规模数据。


基于tidyverse的实现方案

利用dplyr和tidyr的向量化操作,封装成通用函数,自动识别数值型列并统计:

library(dplyr)
library(tidyr)

# 定义通用缺失值统计函数
count_missing <- function(data, missing_values = c(NA, 999, 0)) {
  # 自动筛选数据集中的数值型列
  num_cols <- select(data, where(is.numeric))
  
  # 逐个统计每种缺失值标记的列计数
  result_list <- lapply(missing_values, function(val) {
    if (is.na(val)) {
      num_cols %>% summarise(across(everything(), ~sum(is.na(.))))
    } else {
      num_cols %>% summarise(across(everything(), ~sum(. == val, na.rm = TRUE)))
    }
  })
  
  # 合并结果并整理成行名格式
  bind_rows(result_list) %>%
    mutate(missing_type = ifelse(is.na(missing_values), "NA", as.character(missing_values))) %>%
    column_to_rownames("missing_type")
}

# 示例数据集测试
df <- read.table(text="Subject, var1, var2, var3, var4
A, 1, NA, 3, 999 
B, 0, 5, 2, 1 
C, 7, 6, NA, 7 
D, NA, 1, 0, 2 
E, NA, NA, NA, NA
F, 3, 4, 999, 4 
G, 4, NA, 1, 5 
H, 7, 0, 7, 999", header=TRUE, sep=",")

# 调用函数得到结果
count_missing(df)

函数特性

  • 自动识别数值型列,无需手动指定列索引或列名,适配不同结构的数据集
  • 支持自定义缺失值标记,修改missing_values参数即可扩展其他标记(如-99)
  • 输出格式完全匹配需求,行对应缺失类型,列对应数值列

基础R实现方案

如果不想加载tidyverse包,可使用基础R实现同样功能:

# 定义基础R版本的统计函数
count_missing_base <- function(data, missing_values = c(NA, 999, 0)) {
  # 筛选数值型列
  num_cols <- data[sapply(data, is.numeric)]
  # 初始化结果矩阵
  result_mat <- matrix(nrow = length(missing_values), ncol = ncol(num_cols))
  rownames(result_mat) <- ifelse(is.na(missing_values), "NA", as.character(missing_values))
  colnames(result_mat) <- colnames(num_cols)
  
  # 循环统计每种缺失值
  for (i in seq_along(missing_values)) {
    val <- missing_values[i]
    if (is.na(val)) {
      result_mat[i, ] <- colSums(is.na(num_cols))
    } else {
      result_mat[i, ] <- colSums(num_cols == val, na.rm = TRUE)
    }
  }
  # 转换为数据框输出
  as.data.frame(result_mat)
}

# 调用测试
count_missing_base(df)

使用说明

对于任意数据集,只需调用count_missing(your_data)或count_missing_base(your_data)即可快速得到统计结果,无需重复编写统计逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:31:14