只保留每个用户的最后一个事件名称(r语言)

时间:2016-04-10 10:49:46

标签: r

我有一张桌子(输入):

user_id  timestamp  progression

1 Rob     22223333   Level1
2 Mike    33334444   Level2
3 Rob     55558888   Level3
4 Mike    44447777   Level7

我需要添加上一个progression的列,该列取决于timestamp

期望的输出:

user_id  timestamp  progression lastProgression

1 Rob     22223333   Level1     Level3
2 Mike    33334444   Level2     Level7
3 Rob     55558888   Level3     Level3
4 Mike    44447777   Level7     Level7

1 个答案:

答案 0 :(得分:4)

使用ave中的base R,我们可以在按“user_id”分组后选择最后一个观察(tail(x, 1))(假设'timestamp')先前订购。

df1$lastProgression <- with(df1, ave(progression, user_id, FUN= function(x) tail(x,1)))

dplyr

library(dplyr)
df1 %>% 
  group_by(user_id) %>%
  arrange(desc(timestamp)) %>% 
  mutate(lastProgression = first(progression))

或使用which.max的修改选项(来自@docendo discimus comments)

df1 %>%
   group_by(user_id) %>%
   mutate(lastProgression =  progression[which.max(timestamp)])