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

Если у меня есть таблица вроде этого:

user,v1,v2,v3 a,1,0,0 a,1,0,1 b,1,0,0 b,2,0,3 c,1,1,1 

Как превратить это в это?

 user,v1,v2,v3 a,2,0,1 b,3,0,3 c,1,1,1 

Вы можете использовать dplyr для этого:

 library(dplyr) df = data.frame( user = c("a", "a", "b", "b", "c"), v1 = c(1, 1, 1, 2, 1), v2 = c(0, 0, 0, 0, 1), v3 = c(0, 1, 0, 3, 1)) group_by(df, user) %>% summarize(v1_sum = sum(v1), v2_sum = sum(v2), v3_sum = sum(v3)) 

Если вы не знакомы с нотами %>% , это в основном как трубопровод от bash. Он выводит результат из group_by() и помещает его в group_by() summarize() . То же самое можно было бы сделать так:

 by_user = group_by(df, user) df_summarized = summarize(by_user, v1_sum = sum(v1), v2_sum = sum(v2), v3_sum = sum(v3)) 

В базе R,

 D <- matrix(c(1, 0, 0, 1, 0, 1, 1, 0, 0, 2, 0, 3, 1, 1, 1), ncol=3, byrow=TRUE, dimnames=list(1:5, c("v1", "v2", "v3"))) D <- data.frame(user=c("a", "a", "b", "b", "c"), D) aggregate(. ~ user, D, sum) 

Возвращает

 > aggregate(. ~ user, D, sum) user v1 v2 v3 1 a 2 0 1 2 b 3 0 3 3 c 1 1 1 
Давайте будем гением компьютера.