我想基于用户折叠行,同时将'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)
这是替代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)