繁体   English   中英

R:获取Data.table中的日期差

[英]R: Get the Date Difference in Data.table

我想知道如何得到date differencetwo columndata.table使用lapply在data.table?

library(data.table)
  dt <- fread(" ID          Date        ME_Mes     DOB
 A     2017-02-20  0.0000 2016-08-19
             B      2017-02-06  2.3030 2016-03-11
             C     2017-03-20  0.4135 2016-08-19
             D      2017-03-06  0.0480 2016-10-09
             E     2017-04-20  2.4445 2016-05-04")
> dt
   ID       Date ME_Mes        DOB
1:  A 2017-02-20 0.0000 2016-08-19
2:  B 2017-02-06 2.3030 2016-03-11
3:  C 2017-03-20 0.4135 2016-08-19
4:  D 2017-03-06 0.0480 2016-10-09
5:  E 2017-04-20 2.4445 2016-05-04

###I'd like to calculate the difference in weeks for every ID by comparing the DOB-Date. 

我累了以下几点:

dt[,lapply(.SD, diff.Date), .SDcols = c(4,2), ID] # but did not work!

您可以使用difftime获得以周为单位的差异。 虽然,您需要将列转换为POSIXct

如果您想保持列的类不变,则可以这样做:

dt[, "DOB_Date" := difftime(strptime(dt$Date, format = "%Y-%m-%d"),
                        strptime(dt$DOB,  format = "%Y-%m-%d"), units = "weeks")]

dt
##    ID       Date ME_Mes        DOB       DOB_Date
## 1:  A 2017-02-20 0.0000 2016-08-19 26.43452 weeks
## 2:  B 2017-02-06 2.3030 2016-03-11 47.42857 weeks
## 3:  C 2017-03-20 0.4135 2016-08-19 30.42857 weeks
## 4:  D 2017-03-06 0.0480 2016-10-09 21.14881 weeks
## 5:  E 2017-04-20 2.4445 2016-05-04 50.14286 weeks

但是,正如@Frank所建议的,最好先将您的日期列转换(“覆盖”)为POSIXct类。

我的直觉(我会让其他人纠正我)是,在大型数据集上,以下操作更快:

dt[,Date:=as.Date(Date)]
dt[,DOB:=as.Date(DOB)]
dt[,datediff:=as.integer(Date)-as.integer(DOB)]

datediff将包含以天为单位的日期差。

如果您的数据表确实很大,则可以考虑使用fastPOSIXctfasttime进行字符串转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM