R传播和聚合

时间:2016-01-29 13:39:06

标签: r dataframe

我有data.framedf

userId action    countEvent
A       click        1   
A       view         2
A       purchase     1 
B       Edit         1
B       Edit         1
C       click        1

我怎样才能获得此data.frame

userId  click view purchase Edit
A         1     2      1     0
B         0     0      0     2 
C         1     0      0     0

我试试

spred_data<- df %>%  spread(action    ,countEvent )

但是它的返回错误

  

行的重复标识符

1 个答案:

答案 0 :(得分:1)

您可以使用data.table包轻松完成此操作。与data.frame相比,Data.table包非常快(这就是为什么我现在用于数据修改,我主要使用data.table)。以下是使用data.table包的解决方案:

dcast(df[,sum(countEvent), by=.(userId, action)], 
         formula = userId ~  action, 
         fun.aggregate=sum, 
         value.var="V1")