#r #aggregate
Вопрос:
Я хочу использовать агрегатную функцию в R, используя номера индексов столбцов для идентификации агрегируемых столбцов фрейма данных, а не имен столбцов.
Вот пример, который работает с использованием имен столбцов:
df = data.frame(A = c("a", "a", "b", "b", "c", "c"), B = 1:3, C = 1:3, D = 1:3)
aggregate(cbind(B, C, D) ~ A, data = df, sum)
Но вместо того, чтобы перечислять B, C и D в cbind, я хочу проинструктировать его использовать столбцы 2:4.
Комментарии:
1. вам нужно уменьшить количество колов в group_by, тогда вы также можете сделать
df %>% group_by(A) %>% summarise(across(1:3, sum))
это в dplyr
Ответ №1:
Мы можем просто использовать .
для указания остальных столбцов
aggregate(. ~ A, data = df, sum)
A B C D
1 a 3 3 3
2 b 4 4 4
3 c 5 5 5
Или, если нам нужен конкретный индекс позиции, подмножество данных и преобразование в matrix
aggregate(as.matrix(df[2:4]) ~ A, data = df, sum)
A B C D
1 a 3 3 3
2 b 4 4 4
3 c 5 5 5
Или с помощью dplyr
library(dplyr)
df %>%
group_by(A) %>%
summarise(across(all_of(names(.)[2:4]), sum))
Ответ №2:
Другим способом использования номеров столбцов было бы
aggregate(df[2:4], list(grp = df[[1]]), sum)
#Or using df$A
#aggregate(df[2:4], list(grp = df$A), sum)
# grp B C D
#1 a 3 3 3
#2 b 4 4 4
#3 c 5 5 5