R:获取Data.table中的日期差异
我想知道如何获取date difference
的two column
的data.table
使用lapply
的data.table?R:获取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
类第一。
@SymbolixAU感谢编辑,但它只是涉及到喜好的问题,或者它听起来有点怪异。首先和首先是副词,并且是正确的:https://english.stackexchange.com/questions/174847/first-second-third-and-finally – Masoud
*首先*(:p)我不打算踢如果你编辑回来,大惊小怪。 *其次*,该链接中的所有讨论都将其用作段落标题/开口,我同意这一点。但是,在我听来,在句子结尾处使用它听起来是错误的。 – SymbolixAU
@SymbolizAU tbh对我来说听起来也不对。我会按原样离开它。干杯。 – Masoud
我的直觉(我将让别人指正)是,以下是对大数据集更快:
dt[,Date:=as.Date(Date)]
dt[,DOB:=as.Date(DOB)]
dt[,datediff:=as.integer(Date)-as.integer(DOB)]
datediff
将包含天日期的差异。
如果你有一个真正的大data.table,你可以考虑从fasttime
fastPOSIXct
进行字符串转换。
dt [,“diff”:= difftime(strptime(dt $ Date,format =“%Y-%m-%d”),strptime(dt $ DOB,format =“%Y-%m-% d“),units =”weeks“)]' – Masoud
@Masoud看起来像值得张贴的答案,但我想我会覆盖每个col作为IDate:= first。 – Frank