需要汇总列表中的变量

时间:2019-11-06 00:58:09

标签: r

m是2的列表,如下所示:

   [[1]]
     [,1]      [,2]    
[1,] "a"        "b"

[[2]]
     [,1]     
[1,] "a"
[2,] "b"

现在我需要在group_by_at函数中使用这些子列表,以便有3个group by:(1):by a,(2):by b和(3)by“ a&b ”。我一直未能实现这一目标。 group_by_at函数给我错误:必须求和列位置或名称,而不是列表。 任何帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

这是一种可行的方法。

library(dplyr)
library(purrr)

map(m, function(x) map(seq(ncol(x)), function(y) 
       df %>% group_by_at(x[,y]) %>% summarise(sum = sum(c))))


#[[1]]
#[[1]][[1]]
# A tibble: 1 x 2
#      a   sum
#  <dbl> <int>
#1     1    15

#[[1]][[2]]
# A tibble: 2 x 2
#      b   sum
#  <dbl> <int>
#1     1     6
#2     2     9


#[[2]]
#[[2]][[1]]
# A tibble: 2 x 3
# Groups:   a [1]
#      a     b   sum
#  <dbl> <dbl> <int>
#1     1     1     6
#2     1     2     9

数据

在此样本数据上使用

m <- list(matrix(c("a", "b"), ncol = 2), matrix(c("a", "b")))
df <- data.frame(a = 1, b = c(1, 1, 1, 2, 2), c = 1:5)