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