【发布时间】:2018-05-10 23:10:10
【问题描述】:
我有一个包含 groupID 列和矩阵列的数据框。我想计算每组中矩阵的总和(矩阵加法而不是矩阵元素的总和)。
我意识到这解释得很糟糕 - 这是一个例子。
library(tidyverse)
mydf <- data.frame(groupID= sample(c("A", "B", "C", "D"), 20, replace = T)) %>%
mutate(mat = lapply(1:20, function(x) matrix(runif(9, 0, 10), nrow=3)))
每个观察值都有一个 groupID(A、B、C 或 D)和一个 3x3 实数矩阵。我想计算每组中所有矩阵的总和 - 即 4 个矩阵,暗淡 3x3。
如果mat 只是一个标量值向量,那么它只是group_by(groupID) %>% summarise(sum(mat)) 的一个简单例子。但由于mat 在技术上是一个矩阵列表,我收到以下错误
Error in summarise_impl(.data, dots) : Evaluation error: invalid 'type' (list) of argument.
虽然我想即使这确实有效,但它会给我所有元素的总和。
我也尝试过Reduce,因为它适用于未分组的矩阵列表:
mydf %>% group_by(groupID) %>% summarise(Reduce('+', mat))
Error in summarise_impl(.data, dots) : `Reduce("+", mat)` must be length 1 (a summary value), not 9
基本上,我的印象是summarise 只想为每个组输出一个值而不是矩阵。
现在,我能想到的唯一解决方案是循环遍历groupID 的每个唯一值,过滤数据框并对剩下的内容求和。但这不是很优雅,因为我的实际数据集有大约 3000 个不同的组。
非常感谢任何聪明的想法。
谢谢,
詹姆斯
【问题讨论】: