【发布时间】: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
现在我想计算dmy 和endday 之间的天数差异。这意味着,我应该有类似数字向量的东西,
> 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 时,最明显的答案通常是这种情况。 -
我现在在问自己,我怎么可能错过了那个明显的解决方案!请发布它作为答案。我会将其标记为答案。