我在获得" wave"时遇到了一些麻烦。柱。目前我们只知道前两列。如何编写代码来获取第三列?我真的很感谢你的帮助!
user_id week wave
001 1 1
001 2 2
001 4 4
002 2 1
002 3 2
002 5 4
003 4 1
003 7 4
004 5 1
004 6 2
答案 0 :(得分:0)
对于旧数据集,如果dat
是数据集。
with(dat, ave(week, user_id, FUN=function(x) {
if(!any(diff(x)>1)) NA else x-(x[1]-1)}))
#[1] 1 2 4 1 2 4 1 4 NA NA
使用新数据集,如果您想使用其他选项
library(dplyr)
dat%>% group_by(user_id)%>% mutate(wave=week-week[1]+1)
答案 1 :(得分:0)
根据您对评论和更新数据的更新,您可以这样做(假设您的数据存储在名为dd
的数据框中)
dd$wave <- with(dd, ave(week, user_id, FUN=function(x) {x-min(x)+1}))
在这里,我们使用ave
分别查看每个用户,然后我们采用与第一周不同的值来计算波值。这导致
user_id week wave
1 1 1 1
2 1 2 2
3 1 4 4
4 2 2 1
5 2 3 2
6 2 5 4
7 3 4 1
8 3 7 4
9 4 5 1
10 4 6 2