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
相关产品推荐
相关产品推荐

