【问题标题】:Calculate days between sequential dates in single column计算单列中连续日期之间的天数
【发布时间】:2018-06-05 19:00:57
【问题描述】:

我有以下数据框,其中包含一列日期和一列评估:

dates<-c("2015-01-02","2015-01-10","2016-01-15")
assessments<-c('1','2','3')
dates_dataframe = data.frame(dates, assessments)
dates_dataframe$dates<-as.Date(dates_dataframe$dates)

我想在此数据框中创建另一列,其中包含一次评估与下一次评估之间的天数。

我该怎么做呢?

【问题讨论】:

  • 是的,我只是对 1 和 2 以及 2 和 3 之间的区别感兴趣。第三个单元格可以填充 NA。

标签: r date difference


【解决方案1】:

另一种方法是使用shift函数:

# create data
dates<-c("2015-01-02","2015-01-10","2016-01-15")
assessments<-c('1','2','3')
df <- data.table(dates, assessments)

# convert to date format
df[, dates := as.Date(dates)]

# shift
df[, next_dates := shift(dates, 1)]

# get difference
df[, difference := abs(next_dates - dates)]

        dates assessments next_dates difference
1: 2015-01-02           1       <NA>    NA days
2: 2015-01-10           2 2015-01-02     8 days
3: 2016-01-15           3 2015-01-10   370 days

【讨论】:

    【解决方案2】:

    您可以使用diff

    dates_dataframe$days = c(0, diff(dates_dataframe$dates))
    dates_dataframe$days2 = c(diff(dates_dataframe$dates), 0)
    

    或使用 NA:

    dates_dataframe$days3 = c(NA, diff(dates_dataframe$dates))
    dates_dataframe$days4 = c(diff(dates_dataframe$dates), NA_character_)
    

    结果:

    > dates_dataframe
           dates assessments days    days2 days3    days4
    1 2015-01-02           1    0   8 days    NA   8 days
    2 2015-01-10           2    8 370 days     8 370 days
    3 2016-01-15           3  370   0 days   370  NA days
    

    【讨论】:

      【解决方案3】:

      我认为您应该选择用户的答案,但这是另一个:

      dates<-c("2015-01-02","2015-01-10","2016-01-15")
      assessments<-c('1','2','3')
      dates_dataframe <- cbind.data.frame(dates, assessments)
      dates_dataframe$dates <- as.Date(dates_dataframe$dates)
      dates_dataframe$dates_shift = shift(dates_dataframe$dates,1)
      dates_dataframe$days <- (dates_dataframe$dates - dates_dataframe$dates_shift)
      
      
         dates       assessments dates_shift  days
      1 2015-01-02           1        <NA>  NA days
      2 2015-01-10           2  2015-01-02   8 days
      3 2016-01-15           3  2015-01-10 370 days
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-24
        • 1970-01-01
        • 2021-02-03
        • 2022-01-05
        相关资源
        最近更新 更多