正如@thelatemail 所指出的,您需要返回单个值,而不是所有值的向量。以下是如何做到这一点的示例:
dots = lapply(paste0("col", 1:19), as.symbol)
mydf %>%
group_by_(.dots=dots) %>%
summarise(alltasks = paste(col20, collapse=", "))
对summarise 行的更改是将col20 中的所有值粘贴到一个字符串中。我使用了逗号分隔符,但您当然可以将其更改为您喜欢的任何内容。 dots 业务只是组合所有分组变量而无需输入每个变量的更简单方法。
如果mydf 的名称不是很规则,您可以使用简单的paste 函数来生成它们,其他选项将是,例如:
dots = lapply(names(mydf)[1:19], as.symbol)
或
dots = lapply(names(mydf)[-grep("col20$", names(mydf))], as.symbol)
这是一个使用内置 mtcars 数据框的 dplyr 代码的工作示例:
dots = lapply(c("am","vs","cyl","carb"), as.symbol)
mtcars %>%
group_by_(.dots=dots) %>%
summarise(all_mpg = paste(mpg, collapse=", "))
am vs cyl carb all_mpg
1 0 0 8 2 18.7, 15.5, 15.2, 19.2
2 0 0 8 3 16.4, 17.3, 15.2
3 0 0 8 4 14.3, 10.4, 10.4, 14.7, 13.3
4 0 1 4 1 21.5
5 0 1 4 2 24.4, 22.8
6 0 1 6 1 21.4, 18.1
7 0 1 6 4 19.2, 17.8
8 1 0 4 2 26
9 1 0 6 4 21, 21
10 1 0 6 6 19.7
11 1 0 8 4 15.8
12 1 0 8 8 15
13 1 1 4 1 22.8, 32.4, 33.9, 27.3
14 1 1 4 2 30.4, 30.4, 21.4