R: Как суммировать и группировать по переменным в качестве имен столбцов

#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: действительно, примените функцию (или набор функций) к набору столбцов! Резервуары!