【发布时间】:2020-11-05 15:59:56
【问题描述】:
我有一个数据框,其中有一列日期按递增顺序排列(但更多)
QEP_subset <- data.frame("Date" = c("2020-05-10", "2020-05-24", "2020-06-07", "2020-06-28"))
QEP_subset$Date <- as.Date(QEP_subset$Date, format = "%Y-%m-%d")
QEP_subset
Date
1 2020-05-10
2 2020-05-24
3 2020-06-07
4 2020-06-28
我想创建一个循环,在其中可以找到下一行中的下一个日期与当前日期之间的差异(以天为单位),然后将此差异保存到数据框中的新列 (time_diff)。
这是目标:
Date time_diff
1 2020-05-10 14
2 2020-05-24 14
3 2020-06-07 21
4 2020-06-28 NA
到目前为止,我的想法是这样的:
theDate <- QEP_subset$Date[1]
end <- QEP_subset$Date[length(QEP_subset$Date)]
while (theDate <= end)
{
QEP_subset[ ,time_diff := shift((QEP_subset$Date[theDate]), 1L, type="lag") - QEP_subset$Date[theDate]]
theDate <- theDate + 1
}
但是“shift”功能对我不起作用,我不知道为什么。任何有关 a) 遍历日期列的级别和 b) 提取前一行日期的方法的建议将不胜感激。
【问题讨论】:
-
也许是
library(data.table); setDT(QEP_subset)[, time_diff := as.integer(shift(Date, -1L) - Date)]
标签: r date data.table