我有一张桌子(输入):
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
答案 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)])