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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:40:21