R纵向数据时间段

时间:2014-07-05 14:25:03

标签: r

我在获得" 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

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