我有这个df
df <- read.table(text="
id month gas tickets
1 1 13 14
2 1 12 1
1 2 4 5
3 1 5 7
1 3 0 9
", header=TRUE)
我想做的是计算每个月的汽油,机票(以及我的实际df中另外50多行)的总和。通常我会做类似的事情
result <-
df %>%
group_by(month) %>%
summarise(
gas = sum(gas),
tickets = sum(tickets)
) %>%
ungroup()
但是由于我的数据框中确实有很多列,所以我不想为每列创建求和函数而重复自己。我想知道是否有可能创建一些更精美的功能-或将创建除id和month分组后的month列以外的每个列的总和的函数。
答案 0 :(得分:2)
您可以使用summarise_at()
忽略id
并求和:
df %>%
group_by(month) %>%
summarise_at(vars(-id), list(sum = ~sum))
# A tibble: 3 x 3
month gas_sum tickets_sum
<int> <int> <int>
1 1 30 22
2 2 4 5
3 3 0 9
答案 1 :(得分:1)
您可以使用aggregate
作为注释中推荐的标记。如果您想坚持tidyverse,可以尝试这样的事情:
df %>%
select(-id) %>%
group_by(month) %>%
summarise_if(is.numeric, sum)
#### OUTPUT ####
# A tibble: 3 x 3
month gas tickets
<fct> <int> <int>
1 1 30 22
2 2 4 5
3 3 0 9