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

R语言:统计数据框列中NA/空值数量并汇总对应value列

解决方案:统计各列NA/空值数量及对应value总和

方法一:使用tidyverse工具包

如果习惯用tidyverse的语法,可以通过自定义函数结合map_dfr快速实现需求:

library(tidyverse)

# 原始数据框
df = data.frame (Ref  = c("1", "2", "3", "4"),
                 start_date = c("01/01/20", "02/04/21", NA, NA),
                 text = c("foo", NA, "bar", "foo"),
                 value= c(1000, 7000, 500, 200)
)

# 定义统计函数:输入列名和数据框,返回该列的NA统计结果
calc_na_stats <- function(col_name, df) {
  # 标记该列中NA或空值的行
  na_flag <- is.na(df[[col_name]]) | df[[col_name]] == ''
  tibble(
    列名 = col_name,
    NA/空值数量 = sum(na_flag),
    对应行value总和 = sum(df$value[na_flag], na.rm = TRUE)
  )
}

# 遍历所有列并合并结果
result_df <- df %>%
  names() %>%
  map_dfr(~calc_na_stats(.x, df))

print(result_df)

方法二:基础R实现

如果不想加载额外包,用基础R循环也能完成:

# 原始数据框
df = data.frame (Ref  = c("1", "2", "3", "4"),
                 start_date = c("01/01/20", "02/04/21", NA, NA),
                 text = c("foo", NA, "bar", "foo"),
                 value= c(1000, 7000, 500, 200)
)

# 初始化结果数据框
result_df <- data.frame(
  列名 = character(),
  NA/空值数量 = integer(),
  对应行value总和 = numeric(),
  stringsAsFactors = FALSE
)

# 遍历每一列计算统计值
for (col in names(df)) {
  na_flag <- is.na(df[[col]]) | df[[col]] == ''
  na_count <- sum(na_flag)
  val_sum <- sum(df$value[na_flag], na.rm = TRUE)
  result_df <- rbind(result_df, data.frame(列名 = col, NA/空值数量 = na_count, 对应行value总和 = val_sum))
}

print(result_df)

结果说明

运行任意一种方法后,都会得到如下结果:

列名 NA/空值数量 对应行value总和
1        Ref           0               0
2 start_date           2             700
3        text           1            7000
4       value           0               0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:45:35