0

If I have a table like this:

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

How to I turn it into this?

user,v1,v2,v3
a,2,0,1
b,3,0,3
c,1,1,1
pnuts
  • 58,317
  • 11
  • 87
  • 139

1 Answers1

0

We can use the base R aggregate for getting the sum of columns by group. Here, we use the formula method where . implies all other variables, while the 'user' on the RHS of ~ is the grouping variable. We specify the FUN=sum to get the sum of all other columns.

aggregate(.~user, df1, sum)

Or we can use data.table. We convert the 'data.frame' to 'data.table' (setDT(df1)), grouped by 'user', we loop (lapply) through the subset of data.table (.SD) and get the sum.

library(data.table)
setDT(df1)[, lapply(.SD, sum), by=user]

Or we use dplyr, grouped by 'user', we get the sum of all other columns within summarise_each.

library(dplyr)
df1 %>%
   group_by(user) %>%
   summarise_each(funs(sum))
akrun
  • 874,273
  • 37
  • 540
  • 662