如何用dplyr对嵌套列表按组进行逐元素均值计算?
解决列表列按组计算逐元素均值的问题
嘿,我来帮你搞定这个需求!你遇到的问题是因为mean()函数没办法直接处理列表类型的列,所以才会返回NA和警告。咱们得换个思路,先把组内的列表转换成矩阵,再计算每列的均值,最后再转回列表格式就行啦。
解决方案代码
首先加载需要的包(dplyr用于分组处理):
library(dplyr) # 你的原始数据 df <- data.frame(X1 = c(1,2,2)) df$X2 <- list(list(1, 2), list(0, 1), list(1,0)) # 按X1分组计算逐元素均值 result <- df %>% group_by(X1) %>% summarise(mean = list(colMeans(do.call(rbind, X2)))) # 查看结果 result
代码解释
do.call(rbind, X2):把每个组里的所有列表元素,先转换成数值向量,再合并成一个矩阵。比如X1=2的组里,两个列表list(0,1)和list(1,0)会被转成rbind(c(0,1), c(1,0)),得到一个2行2列的矩阵。colMeans():对这个矩阵的每一列计算均值,这样就得到了逐元素的平均值,比如X1=2的组会得到c(0.5, 0.5)。list():把计算出来的均值向量包装成列表,这样结果里的mean列就和原始的X2列保持一样的列表格式啦。
输出结果
运行上面的代码后,你会得到:
# A tibble: 2 × 2 X1 mean <dbl> <list> 1 1 <dbl [2]> 2 2 <dbl [2]>
如果想看具体的均值内容,可以用result$mean查看:
[[1]] [1] 1 2 [[2]] [1] 0.5 0.5
完全符合你想要的结果!
内容的提问来源于stack exchange,提问作者Antoine C.
相关产品推荐
相关产品推荐

