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函数给我错误:必须求和列位置或名称,而不是列表。 任何帮助将不胜感激。
谢谢!
答案 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)