【问题标题】:Create loop to find difference between current date and date of row below创建循环以查找当前日期和下面行日期之间的差异
【发布时间】: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


【解决方案1】:

最简单的方法可能是:

QEP_subset$Diff <- c(as.numeric(diff(QEP_subset$Date)),NA)

【讨论】:

    【解决方案2】:

    这应该可行:

    QEP_subset$diff <-  shift(QEP_subset$Date, n=1, fill=NA, type="lead")  - QEP_subset$Date
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      • 2019-04-24
      相关资源
      最近更新 更多