R difftime()生成不正确的间隔

kokeuurv  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(136)

数据是从CSV文件导入的,日期最初是字符。我已经分别对它们进行了变异,因为我想对它们做一些进一步的分析。
我能找到的关于这个主题的唯一另一个问题,答案很复杂,因为需要考虑到1970年之前的日期,但我的数据是过去几年的,所以这不是一个考虑因素。

EARLIEST_DATE <- c(06/07/2021, 15/11/2019, 01/10/2019, 24/09/2019, 10/11/2020, 21/09/2021, 21/07/2020, 18/10/2022, 05/10/2021, 22/10/2021)
LATEST_DATE <- c(28/09/2021, 20/12/2019, 31/03/2020, 18/09/2020, 15/06/2021, 28/06/2022, 04/09/2020, 28/02/2023, 02/11/2021, 08/07/2022)

library(dplyr)    

df <- data.frame(EARLIEST_DATE, LATEST_DATE)

df %>%
  mutate(EARLIEST_DATE = as.Date(EARLIEST_DATE,'%d/%m/%Y'),
         LATEST_DATE = as.Date(LATEST_DATE,'%d/%m/%Y'))

df %>%
  summarise(weeks = ceiling(as.numeric(difftime(EARLIEST_DATE, LATEST_DATE, units = "weeks"))))

我得到以下结果:
我不明白为什么它给出了如此错误的值。
它们都应该是正数,并且没有一个间隔超过一年,所以它甚至不像是以天为单位表示的差异。天花板子句是这样的,周的值至少为1。
我可以在Excel中很好地计算差异,但是文件太大了,每当我尝试做任何事情时都会崩溃,因此使用R。

njthzxwz

njthzxwz1#

尝试在计算之前将它们解析为字符串。使用lubridate的dmy()来解析日-月-年格式的字符串,我似乎得到了更合理的输出。

library(dplyr)
library(lubridate)
EARLIEST_DATE <- dmy(c("06/07/2021", "15/11/2019", "01/10/2019", "24/09/2019", "10/11/2020", "21/09/2021", "21/07/2020", "18/10/2022", "05/10/2021", "22/10/2021"))
LATEST_DATE <- dmy(c("28/09/2021", "20/12/2019", "31/03/2020", "18/09/2020", "15/06/2021", "28/06/2022", "04/09/2020", "28/02/2023", "02/11/2021", "08/07/2022"))

df <- tibble(EARLIEST_DATE, LATEST_DATE)

df %>%
  reframe(weeks = ceiling(as.numeric(difftime(LATEST_DATE, EARLIEST_DATE, units = "weeks"))))
#> # A tibble: 10 x 1
#>    weeks
#>    <dbl>
#>  1    12
#>  2     5
#>  3    26
#>  4    52
#>  5    31
#>  6    40
#>  7     7
#>  8    19
#>  9     4
#> 10    37

创建于2023-04-12带有reprex v2.0.2

相关问题