dplyr split-apply-combine与列表列

时间:2018-08-27 12:50:15

标签: r dplyr

说我有一个tibble,其中有两列:组变量(grp)和列表列 包含等尺寸(矩阵)的矩阵。

mat1 <- matrix(c(2, 0, 0, 0), nrow = 2)
mat2 <- matrix(c(0, 0, 0, 0), nrow = 2)
mat3 <- matrix(c(0, 0, 0, 2), nrow = 2)
mat4 <- matrix(c(0, 0, 0, 0), nrow = 2)

df <- tibble(grp = c('a', 'a', 'b', 'b'),
             mat = list(mat1, mat2, mat3, mat4))

编辑:

我想按组计算平均矩阵,并将其添加为新的列表列。即新列应为:

list(matrix(c(1, 0, 0, 0), nrow = 2),
     matrix(c(1, 0, 0, 0), nrow = 2),
     matrix(c(0, 0, 0, 1), nrow = 2),
     matrix(c(0, 0, 0, 1), nrow = 2))

我能做的最好的事情是:

df_out <- df %>% 
  group_by(grp) %>% 
  mutate(n = n(),
         mean_mat = list(Reduce('+', mat) / n)) %>% 
  ungroup()

它可以工作,但是我试图理解为什么需要调用list,并且希望找到一种可能更简单的替代方法(tidyverse或base R)。

0 个答案:

没有答案