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

如何在tidyverse中批量计算含NA的多列行均值(无需列名枚举)

解决tidyverse中批量列行均值计算的问题

错误原因

你使用c(A1:C3)的写法逻辑错误:这里的:不是用来选择列范围,而是尝试生成数值序列(比如第二行中A1=50、C3=NA,执行50:NA会直接抛出NA/NaN错误),这个错误发生在调用mean()之前,因此na.rm参数根本没机会生效。

两种可行解决方案

方案1:c_across() + rowwise()(直观适配行操作)

c_across()是tidyverse专门为行级操作设计的函数,支持用列范围(如A1:C3)选中行内所有目标列的数值,配合rowwise()实现行均值计算:

data1 <- data %>%
  rowwise() %>%
  mutate(m = mean(c_across(A1:C3), na.rm = TRUE)) %>%
  ungroup() # 完成后取消行分组,避免后续操作性能下降

方案2:rowMeans() + across()(无分组,效率更高)

如果数据集较大,rowwise()的性能开销会很明显,推荐直接用rowMeans结合across()选择列范围,无需行分组:

data1 <- data %>%
  mutate(m = rowMeans(across(A1:C3), na.rm = TRUE))

验证结果

以你的示例数据为例,两种方法都会正确计算:

  • 第一行(SampleID=5):所有54列无NA,均值为对应列数值的算术平均
  • 第二行(SampleID=6):自动忽略所有NA值,仅计算非NA列的均值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:56:15