用户使用dplyr折叠行

ant*_*ant 6 r dplyr

我想基于用户折叠行,同时将'1'放在相应的列上.

每个用户的每行只能有一个'1',因此不需要添加任何后续行.

我的df:

User  +1  +2  +3  +4  +5
   A   1   0   0   0   0
   A   0   1   0   0   0
   A   0   0   0   0   1
   B   0   0   1   0   0 
   B   0   0   0   1   0
Run Code Online (Sandbox Code Playgroud)

预期结果:

User  +1  +2  +3  +4  +5
   A   1   1   0   0   1
   B   0   0   1   1   0 
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

tal*_*lat 16

看起来你可以使用summarise_each:

df %>% group_by(User) %>% summarise_all(funs(sum))
Run Code Online (Sandbox Code Playgroud)


Dav*_*urg 7

这是替代dplyr解决方案

df %>% group_by(User) %>% do(as.list(colSums(.)))
Run Code Online (Sandbox Code Playgroud)

或者data.table可能的实施

library(data.table)
setDT(df)[, lapply(.SD, sum), User]
Run Code Online (Sandbox Code Playgroud)

要么

setDT(df)[, as.list(colSums(.SD)), User]
Run Code Online (Sandbox Code Playgroud)

或者使用基础R,甚至更简单

aggregate(. ~ User, df, sum)
Run Code Online (Sandbox Code Playgroud)