#r
#r
Вопрос:
У меня есть широкий фрейм данных примерно с 200 столбцами, и я хочу суммировать его по различным столбцам. Я не могу понять синтаксис для этого, я думаю, что это должно работать с .data $ и .env $, но я этого не понимаю. Вот пример:
> library(dplyr)
> df = data.frame('A'= c('X','X','X','Y','Y'), 'B'= 1:5, 'C' = 6:10)
> df
A B C
1 X 1 6
2 X 2 7
3 X 3 8
4 Y 4 9
5 Y 5 10
> df %>% group_by(A) %>% summarise(sum(B), sum(C))
`summarise()` ungrouping output (override with `.groups` argument)
# A tibble: 2 x 3
A `sum(B)` `sum(C)`
<chr> <int> <int>
1 X 6 21
2 Y 9 19
Но я хочу иметь возможность сделать что-то подобное этому:
columns_to_sum = c('B','C')
columns_to_group = c('A')
df %>% group_by(colums_to_group)%>% summarise(sum(columns_to_sum))
Ответ №1:
Мы можем использовать across
из новой версии dplyr
library(dplyr)
df %>%
group_by(across(colums_to_group)) %>%
summarise(across(all_of(columns_to_sum), sum, na.rm = TRUE), .groups = 'drop')
# A tibble: 2 x 3
# A B C
# <chr> <int> <int>
#1 X 6 21
#2 Y 9 19
В предыдущей версии мы могли использовать group_by_at
наряду с summarise_at
df %>%
group_by_at(colums_to_group) %>%
summarise_at(vars(columns_to_sum), sum, na.rm = TRUE)
Комментарии:
1. across: действительно, примените функцию (или набор функций) к набору столбцов! Резервуары!