【问题标题】:Counting difference in days between two dates using lubridate使用 lubridate 计算两个日期之间的天数差异
【发布时间】:2020-06-28 11:20:07
【问题描述】:

我想使用 lubridate 计算两个日期之间的差异。我想我快到了,但我的尝试出了点问题。

这是我的数据集,

library(lubridate)

day <- c(NA, NA, NA, "01", NA, "30", NA, "20", "09", NA)
my <- ifelse(is.na(day), NA, "042020")
value <- c(19, 23, 25, 26, 22, 12, 12, 34, 54, 23)
dmy <- ifelse(is.na(day), NA, paste(day, my, sep = ""))
endday <- ifelse(is.na(dmy), NA, rep("30042020"))
data <- data.frame(dmy, endday, value)
data$dmy <- lubridate::dmy(dmy)
data$endday <- lubridate::dmy(endday)

这将产生以下数据框,

> data
          dmy     endday value
1        <NA>       <NA>    19
2        <NA>       <NA>    23
3        <NA>       <NA>    25
4  2020-04-01 2020-04-30    26
5        <NA>       <NA>    22
6  2020-04-30 2020-04-30    12
7        <NA>       <NA>    12
8  2020-04-20 2020-04-30    34
9  2020-04-09 2020-04-30    54
10       <NA>       <NA>    23

现在我想计算dmyendday 之间的天数差异。这意味着,我应该有类似数字向量的东西,

> data$daydiff
<NA>
<NA>
<NA>
29
<NA>
0
<NA>
10
21
<NA>

我这样做是为了达到结果,

inter <- ifelse(is.na(data$dmy), NA, (data$endday %--% data$dmy))
inter
ddays(inter)

这给了我这样的结果,

> ddays(inter)
 [1] NA                                 NA                                
 [3] NA                                 "-216483840000s (~-6859.96 years)"
 [5] NA                                 "0s"                              
 [7] NA                                 "-74649600000s (~-2365.5 years)"  
 [9] "-156764160000s (~-4967.56 years)" NA   

如何解决此问题以获得预期结果?

【问题讨论】:

  • data$endday - data$dmy 在您使用 lubridate 时,最明显的答案通常是这种情况。
  • 我现在在问自己,我怎么可能错过了那个明显的解决方案!请发布它作为答案。我会将其标记为答案。

标签: r tidyverse lubridate


【解决方案1】:

lubridate 包可以缓解处理日期时的大部分问题。正如我在评论中所述,只需减去两个日期即可轻松解决此问题,例如:

data$endday - data$dmy

给出预期的结果。

【讨论】:

    猜你喜欢
    • 2010-12-09
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    相关资源
    最近更新 更多