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

是否应使用unnest_wider与rowMeans计算列表列平均值?求高效方案

解决方法:两种场景的处理方案

一、针对当前带列表列的宽格式数据集

你遇到的unnest_wider报错,本质是参数传递不符合要求:该函数的第二个参数需要传入列名的字符/数值向量,你可能误传了数据框对象。不过其实不用展开列表列,直接对每行的列表计算平均值更高效:

方法1:用dplyr的rowwise+mean

library(dplyr)

dataset <- dataset %>%
  rowwise() %>%
  mutate(avg_value = mean(years, na.rm = TRUE)) %>% # 将years替换为你的列表列名
  ungroup()

方法2:用purrr的map_dbl批量计算

如果不用dplyr,也可以直接用purrr处理列表列:

library(purrr)

dataset$avg_value <- map_dbl(dataset$years, ~mean(.x, na.rm = TRUE))

之前直接用rowMeans、apply无效,是因为这些函数仅支持数值型矩阵/数据框,无法识别列表类型的列。

二、推荐:直接从原始长格式计算(更简单高效)

你提到数据集是通过pivot_wider和t()转换而来,其实完全没必要转成宽格式再处理——原始长格式下计算平均值更直接,还能避免列表列的麻烦:

假设你的原始长格式数据结构如下(示例):

索引列yearsvalue
样本A202010
样本A202120
样本B202015
样本B202125

直接按索引分组计算平均值:

library(dplyr)

original_long_data %>%
  group_by(索引列) %>% # 替换为你实际的索引列名
  summarise(avg_value = mean(value, na.rm = TRUE)) # 替换为你实际的数值列名

如果不用dplyr,用基础R的aggregate也能实现:

aggregate(value ~ 索引列, data = original_long_data, FUN = mean, na.rm = TRUE)

这样得到的结果直接就是每个索引对应的平均值,步骤更少且不易出错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:01:38