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

如何用dplyr::across结合列表列索引批量计算多列均值?

批量按列表索引计算多列均值

需求:对数据框中的多列(如示例中的v1、v2),根据另一列k存储的索引列表,逐行计算对应索引位置的该列均值。实际场景中列数多且动态变化,无法手动逐个列编写计算逻辑。

示例数据如下:

library(dplyr)
library(purrr)
set.seed(1452)

df <- tibble(id = 1:10,
             v1 = rnorm(10, 3, 10),
             v2 = runif(10, -5, 5),
             k = list(c(1,2,3), c(2,4,10), c(2,4,6), c(6,8,9), 
                      c(3,5,7), c(1,8,10), c(2,3,5), c(1,4,9),
                      c(6,7,10), c(3,6,8))
             )

原尝试的across写法无法生效,因为.x是整列向量,直接和k(列表列)匹配会出现维度不兼容问题。正确的写法是在across内部结合map_dbl,逐行处理每个索引列表:

df %>% 
  mutate(across(v1:v2, ~map_dbl(k, ~mean(.x[.x])), .names = "{.col}_mean"))

或者用更清晰的命名参数避免变量混淆:

df %>% 
  mutate(across(v1:v2, function(col) map_dbl(k, ~mean(col[.x])), .names = "{.col}_mean"))

验证结果:以第一行v1_mean为例,计算的就是v1[1:3]的平均值,符合预期。这种写法支持任意多列的批量处理,无需手动逐个列定义计算逻辑。

内容的提问来源于stack exchange,提问作者Denys D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:57:16