按组从上一行中减去日期(使用R)

按组从上一行中减去日期(使用R),r,dataframe,dplyr,lag,R,Dataframe,Dplyr,Lag,我有一个类似于这个()的问题,但我想用组ID从当前日期中减去前一个日期,以得到估计的天数。我试着编辑之前建议的脚本,将“value”替换为 “日期”。 虽然我尝试了不同的建议方法,但我一直收到错误消息“在mutate_impl(.data,dots)中出错”: 计算错误:无法为签名“POSIXct”的函数优先找到继承的方法 我想要这种桌子 Data id date date_difference(in days) 2380 10/30/12 0 2380

我有一个类似于这个()的问题,但我想用组ID从当前日期中减去前一个日期,以得到估计的天数。我试着编辑之前建议的脚本,将“value”替换为 “日期”。 虽然我尝试了不同的建议方法,但我一直收到错误消息“在mutate_impl(.data,dots)中出错”: 计算错误:无法为签名“POSIXct”的函数优先找到继承的方法

我想要这种桌子

Data
id      date        date_difference(in days)
2380    10/30/12    0
2380    10/31/12    1
2380    11/1/12     2
2380    11/2/12     3
20100   10/30/12    0
20100   10/31/12    2
20100   11/1/12     3
20100   11/2/12     4
20103   10/30/12    0
20103   10/31/12    1
库(tidyverse)
图书馆(lubridate)
#> 
#>附加包装:“lubridate”
#>以下对象已从“package:base”屏蔽:
#> 
#>日期
df%
突变(日期=mdy(日期))%>%
分组依据(id)%>%
变异(日期差异=as.numeric(日期-第一个(日期)))
#>#tibble:10 x 3
#>#组:id[3]
#>id日期差异
#>                    
#>  1  2380 2012-10-30               0
#>  2  2380 2012-10-31               1
#>  3  2380 2012-11-01               2
#>  4  2380 2012-11-02               3
#>  5 20100 2012-10-30               0
#>  6 20100 2012-10-31               1
#>  7 20100 2012-11-01               2
#>  8 20100 2012-11-02               3
#>  9 20103 2012-10-30               0
#> 10 20103 2012-10-31               1
由(v0.2.1)库(tidyverse)于2018年11月29日创建 图书馆(lubridate) #> #>附加包装:“lubridate” #>以下对象已从“package:base”屏蔽: #> #>日期 df% 突变(日期=mdy(日期))%>% 分组依据(id)%>% 变异(日期差异=as.numeric(日期-第一个(日期))) #>#tibble:10 x 3 #>#组:id[3] #>id日期差异 #> #> 1 2380 2012-10-30 0 #> 2 2380 2012-10-31 1 #> 3 2380 2012-11-01 2 #> 4 2380 2012-11-02 3 #> 5 20100 2012-10-30 0 #> 6 20100 2012-10-31 1 #> 7 20100 2012-11-01 2 #> 8 20100 2012-11-02 3 #> 9 20103 2012-10-30 0 #> 10 20103 2012-10-31 1
由(v0.2.1)于2018-11-29创建首先,创建一个函数来计算日差

library(stringr)

day_diff <- function(day) {
    days <- difftime(day, "2012-10-30", "days")
    str_extract(days, "\\-*\\d+\\.*\\d*")
}
df$date_difference <- unlist(lapply(df$date, day_diff))
库(stringr)

day_diff首先,创建一个函数来计算日差

library(stringr)

day_diff <- function(day) {
    days <- difftime(day, "2012-10-30", "days")
    str_extract(days, "\\-*\\d+\\.*\\d*")
}
df$date_difference <- unlist(lapply(df$date, day_diff))
库(stringr)

day_diff
?as.Date
?diff
c(0,diff(…)
对于分组部分,也可以查看:
数据。表:
dplyr:
?base::ave
。另外:
20100 10/30/12 1
应该是
20100 10/30/12 0,对吗?如果你真的意思是这样的话“从当前日期中减去上一个日期”,则大多数
日期差
值都不正确。也许您的意思是“用
id
从第一个日期减去日期”?另请参见
?dplyr::lag
?as.date
?diff
c(0,diff(…)
对于分组部分,还可以查看:
数据。表:
dplyr::
?base::ave
。另外:
20100 10/30/12 1
应该是
20100 10/30/12 0
,对吗?如果你真的意思是“从当前日期减去上一个日期”“,则大多数
日期差异
值都不正确。也许您的意思是“用
id
”减去第一个日期?另请参见
?dplyr::lag
谢谢。与stringi派生的ScriptsHanks相比,它要容易得多。与stringi派生脚本相比,它要容易得多