我想计算某些列的平均值(存储在向量中的名称),同时对列进行分组。这是一个可重现的示例:
Cities <- c("London","New_York")
df <- data.frame(Grade = c(rep("Bad",2),rep("Average",4),rep("Good",4)),
London = seq(1,10,1),
New_York = seq(11,20,1),
Shanghai = seq(21,30,1))
> df
Grade London New_York Shanghai
1 Bad 1 11 21
2 Bad 2 12 22
3 Average 3 13 23
4 Average 4 14 24
5 Average 5 15 25
6 Average 6 16 26
7 Good 7 17 27
8 Good 8 18 28
9 Good 9 19 29
10 Good 10 20 30
我想要的输出:
> df %>% group_by(Grade) %>% summarise(London = mean(London), New_York = mean(New_York))
# A tibble: 3 x 3
Grade London New_York
<fct> <dbl> <dbl>
1 Average 4.5 14.5
2 Bad 1.5 11.5
3 Good 8.5 18.5
我想在cities
中选择向量summarise
中的元素(不调用其名称),同时在向量中保留其原始名称
答案 0 :(得分:2)
您可以这样做:
df %>%
group_by(Grade) %>%
summarise_at(vars(one_of(Cities)), mean)
Grade London New_York
<fct> <dbl> <dbl>
1 Average 4.5 14.5
2 Bad 1.5 11.5
3 Good 8.5 18.5
摘自文档:
one_of():匹配字符向量中的变量名称。
答案 1 :(得分:0)
vars
可以采用vector
这样的列名。 select-helpers
(matches
,starts_with
,ends_with
在需要某种模式匹配时使用)。现在,对于当前的实现方式vars
更为通用,它可以选择列,然后取消选择(使用-
)
library(dplyr)
df %>%
group_by(Grade) %>%
summarise_at(vars(Cities), mean)
# A tibble: 3 x 3
# Grade London New_York
# <fct> <dbl> <dbl>
#1 Average 4.5 14.5
#2 Bad 1.5 11.5
#3 Good 8.5 18.5