R 使用登录日期延迟数据计算登录之间的时间

R 使用登录日期延迟数据计算登录之间的时间,r,dplyr,time-series,lag,R,Dplyr,Time Series,Lag,我有一个数据集,我将简化为: 来自str() $User#id:num[1:84164]####################(匿名)。。。 $DateLoggedIn:Date[1:84164],格式:“2020-11-14”“2020-11-11”“2020-11-05”“2020-11-01” 我正在尝试创建一个数据框,该数据框在登录时具有一系列列 用户| id | DateLoggedIn(排序为最后一次)|第二次最后登录|第三次最后登录|等等,这样我可以计算出所有列之间的时间,也可以

我有一个数据集,我将简化为:

来自str() $User#id:num[1:84164]####################(匿名)。。。 $DateLoggedIn:Date[1:84164],格式:“2020-11-14”“2020-11-11”“2020-11-05”“2020-11-01”

我正在尝试创建一个数据框,该数据框在登录时具有一系列列

用户| id | DateLoggedIn(排序为最后一次)|第二次最后登录|第三次最后登录|等等,这样我可以计算出所有列之间的时间,也可以创建登录列之间的平均时间

TimeBetween <- TimeBetween >% arrange(.,User_id, desc(DateLoggedIn)) %>% group_by(.,User_id)  %>% 
  mutate(.,SecLog = lag(DateLoggedIn,1)) %>% 
  mutate(.,TrdLog = lag(DateLoggedIn,2)) %>% 
  mutate(.,FrthLog = lag(DateLoggedIn,3)) %>% 
  mutate(.,FithLog = lag(DateLoggedIn,4)) %>% 
TimeBetween%arrange(,User\u id,desc(DateLoggedIn))%%>%group\u by(,User\u id)%%
突变(,SecLog=lag(DateLoggedIn,1))%>%
突变(,TrdLog=lag(DateLoggedIn,2))%>%
突变(,FrthLog=lag(DateLoggedIn,3))%>%
突变(,FithLog=lag(DateLoggedIn,4))%>%
它的输出总是错误的,我希望它对于每个用户ID都会滞后,但它只滞后于第一行

我尝试过使用HMISC lag\DPLYR last\base lag,并将管道顺序和内部排列顺序更改为“无运气”

有人能帮忙吗

谢谢

示例数据--dput(时间间隔[1:50,c(1,3,6)]) 结构(列表(用户id=c(130223、130223、130223130223130223136038136038136038),日期记录数据=c(“2020-11-14”、“2020-11-11”、“2020-11-05”、“2020-11-01”、“2020-10-28”、“2020-10-27”、“2020-09-21”、“2020-09-20”、“2020-09-20”)

用户id 144548 144548 144548 144548 144548 144548 144548 144548 144548 144548 144548 142267 142267 142267 142267 142267 142267 142267 142267

日期记录 2020-11-14 2020-11-11 2020-11-05 2020-11-01 2020-10-28 2020-10-27 2020-10-26 2020-10-23 2020-10-22 2020-10-21 2020-10-11 2020-09-11 2020-09-08 2020-09-07 2020-09-06 2020-09-05 2020-09-02 2020-08-30 2020-08-29

期望输出-对于每个用户id,延迟再次开始

用户id 144548 144548 144548 144548 144548 144548 144548 144548 144548 144548 144548 142267 142267 142267 142267 142267 142267 142267 142267

日期记录 2020-11-14 2020-11-11 2020-11-05 2020-11-01 2020-10-28 2020-10-27 2020-10-26 2020-10-23 2020-10-22 2020-10-21 2020-10-11 2020-09-11 2020-09-08 2020-09-07 2020-09-06 2020-09-05 2020-09-02 2020-08-30 2020-08-29

Lag1 NA 2020-11-14 2020-11-11 2020-11-05 2020-11-01 2020-10-28 2020-10-27 2020-10-26 2020-10-23 2020-10-22 2020-10-21 NA 2020-09-11 2020-09-08 2020-09-07 2020-09-06 2020-09-05 2020-09-02 2020-08-30

Lag2 NA NA 2020-11-14 2020-11-11 2020-11-05 2020-11-01 2020-10-28 2020-10-27 2020-10-26 2020-10-23 2020-10-22 NA NA 2020-09-11 2020-09-08 2020-09-07 2020-09-06 2020-09-05 2020-09-02

Lag3 NA NA NA 2020-11-14 2020-11-11 2020-11-05 2020-11-01 2020-10-28 2020-10-27 2020-10-26 2020-10-23 NA NA NA 2020-09-11 2020-09-08 2020-09-07 2020-09-06 2020-09-05


然而,我得到的是lag并不能区分不同的用户ID。

在修复了一些打字错误后,我无法重现您的问题

library(dplyr)
TimeBetween <- structure(list(User_id = c(130223, 130223, 130223,130223,130223,130223,136038,136038,136038), 
                           DateLoggedIn = c("2020-11-14", "2020-11-11", "2020-11-05","2020-11-01","2020-10-28","2020-10-27","2020-09-21","2020-09-20","2020-09-20")))

TimeBetween <- bind_cols(TimeBetween)
# TimeBetween$DateLoggedIn <- as.Date(TimeBetween$DateLoggedIn )

TimeBetween %>% arrange(User_id, desc(DateLoggedIn)) %>% group_by(User_id)  %>% 
mutate(SecLog = lag(DateLoggedIn,1)) %>% 
   mutate(TrdLog = lag(DateLoggedIn,2)) %>% 
   mutate(FrthLog = lag(DateLoggedIn,3)) %>% 
   mutate(FithLog = lag(DateLoggedIn,4))

# A tibble: 9 x 6
# Groups:   User_id [2]
  User_id DateLoggedIn SecLog     TrdLog     FrthLog    FithLog   
    <dbl> <chr>        <chr>      <chr>      <chr>      <chr>     
1  130223 2020-11-14   NA         NA         NA         NA        
2  130223 2020-11-11   2020-11-14 NA         NA         NA        
3  130223 2020-11-05   2020-11-11 2020-11-14 NA         NA        
4  130223 2020-11-01   2020-11-05 2020-11-11 2020-11-14 NA        
5  130223 2020-10-28   2020-11-01 2020-11-05 2020-11-11 2020-11-14
6  130223 2020-10-27   2020-10-28 2020-11-01 2020-11-05 2020-11-11
7  136038 2020-09-21   NA         NA         NA         NA        
8  136038 2020-09-20   2020-09-21 NA         NA         NA        
9  136038 2020-09-20   2020-09-20 2020-09-21 NA         NA     
库(dplyr)
时间间隔%
突变(SecLog=lag(DateLoggedIn,1))%>%
突变(TrdLog=lag(DateLoggedIn,2))%>%
突变(FrthLog=lag(DateLoggedIn,3))%>%
突变(FithLog=lag(DateLoggedIn,4))
#一个tibble:9x6
#组:用户标识[2]
用户id日期记录在SecLog TrdLog FrthLog FithLog中
1302232020-11-14不适用
2130223 2020-11-11 2020-11-14不适用
3 130223 2020-11-05 2020-11-11 2020-11-14北美
4 130223 2020-11-01 2020-11-05 2020-11-11 2020-11-14北美
5  130223 2020-10-28   2020-11-01 2020-11-05 2020-11-11 2020-11-14
6  130223 2020-10-27   2020-10-28 2020-11-01 2020-11-05 2020-11-11
7 136038 2020-09-21不适用
8 136038 2020-09-20 2020-09-21不适用
9 136038 2020-09-20 2020-09-20 2020-09-21北美

要求结束此问题。

谢谢,希望现在更好谢谢,对我来说仍然不起作用。我尝试了日期和字符两种方式。你将日期设置为chr而不是date有什么原因吗?我将进一步调查在空白项目上运行代码是否有效。问题似乎与包冲突有关。谢谢你的帮助