如何对DataFrame中以列表存储的矩阵按分组执行矩阵加法?
可以实现,你原有代码无法得到预期结果的核心原因是sum()作用于存储矩阵的列表时,会扁平化所有元素返回全局求和的单个数值,不会执行矩阵对位加法。可以通过Reduce()函数实现分组矩阵累加,修改后的可运行代码如下:
library(dplyr) # 构造示例数据 mtx <- matrix(data=1:9,ncol=3) df <- data.frame(gp=c("a","a","b","c"),data=NA) df$data[1] <- list(mtx) df$data[2] <- list(mtx) df$data[3] <- list(mtx) df$data[4] <- list(mtx) # 按分组累加矩阵的核心代码 df2 <- df %>% group_by(gp) %>% summarise(total = list(Reduce(`+`, data))) # 验证结果和预期一致 # 查看a组的累加结果 print(df2$total[df2$gp == "a"][[1]])
运行后a组输出的矩阵就是2倍的原始矩阵,和你期望的df3结果完全匹配。
核心逻辑说明:
Reduce(+, data)会对当前分组内data列存储的所有矩阵,按顺序执行对位加法,最终返回一个累加完成的矩阵- 外层套
list()是为了将生成的矩阵作为单个元素存入数据框单元格,避免矩阵被自动展开为多列,保持你需要的矩阵存储格式。
内容的提问来源于stack exchange,提问作者Zeus
相关产品推荐
相关产品推荐

