R语言求助:批量计算多CSV列均值时结果返回NA值
问题排查与代码修正
错误原因
你的代码核心问题出在summarise的用法上:
vars(column1, column2)并非summarise中指定计算变量的正确方式,它会生成一个存储变量引用的<quos>类型列,而非对目标列执行计算。mean(mean)完全无效——你没有名为mean的列,所以计算结果必然是NA。
修正后的代码
使用tidyverse推荐的across函数批量处理指定列的均值计算:
library(purrr) library(dplyr) # 基础写法 examples_mean <- map(examples, function(data_df) { data_df %>% summarise(across(c(column1, column2), mean, na.rm = TRUE)) }) # 更简洁的公式写法 examples_mean <- map(examples, ~ .x %>% summarise(across(c(column1, column2), mean, na.rm = TRUE)))
输出说明
修正后会得到一个列表,每个元素对应CSV数据框的汇总结果,格式如下:
$`data/example_1.csv` # A tibble: 1 × 2 column1 column2 <dbl> <dbl> 1 5.23 7.89
如果需要整理成你原代码试图生成的两行长格式,可以添加pivot_longer:
examples_mean <- map(examples, function(data_df) { data_df %>% summarise(across(c(column1, column2), mean, na.rm = TRUE)) %>% pivot_longer(everything(), names_to = "variable", values_to = "mean_value") })
对应的输出结构:
$`data/example_1.csv` # A tibble: 2 × 2 variable mean_value <chr> <dbl> 1 column1 5.23 2 column2 7.89
补充说明
na.rm = TRUE用于避免数据中存在NA时导致均值返回NA,可根据你的实际数据调整。- 若使用旧版本dplyr(<1.0.0),可用
summarise_at替代across:summarise_at(vars(column1, column2), mean, na.rm = TRUE)
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

