解析多个日期格式时出现Lubridate警告

epfja78i  于 2024-01-03  发布在  其他
关注(0)|答案(1)|浏览(211)

我有一个数据框,其中的字符列有两种不同的日期格式,一种是mm/dd/yy,另一种是dd/mm/yyyy,所以我想使用lubridate来解析它们,并根据字符的数量进行调节。

  1. x <- c("01/11/24", "17/11/2023", "02/25/24", "01/03/2022")
  2. df <- as_tibble(x)
  3. new_df <- df %>% mutate(value = if_else(nchar(value) == 8, mdy(value), dmy(value)))

字符串
这似乎会生成正确的日期列,但它会生成以下警告:

  1. new_df
  2. # A tibble: 4 × 1
  3. value
  4. <date>
  5. 1 2024-01-11
  6. 2 2023-11-17
  7. 3 2024-02-25
  8. 4 2022-03-01
  9. Warning message:
  10. There were 2 warnings in `mutate()`.
  11. The first warning was:
  12. In argument: `value = if_else(nchar(value) == 8, mdy(value), dmy(value))`.
  13. Caused by warning:
  14. ! 1 failed to parse.
  15. Run dplyr::last_dplyr_warnings() to see the 1 remaining warning.
  16. > dplyr::last_dplyr_warnings()
  17. [[1]]
  18. <warning/rlang_warning>
  19. Warning in `mutate()`:
  20. In argument: `value = if_else(nchar(value) == 8, mdy(value), dmy(value))`.
  21. Caused by warning:
  22. ! 1 failed to parse.
  23. ---
  24. Backtrace:
  25. 1. ├─df %>% ...
  26. 2. ├─dplyr::mutate(...)
  27. 3. └─dplyr:::mutate.data.frame(...)
  28. [[2]]
  29. <warning/rlang_warning>
  30. Warning in `mutate()`:
  31. In argument: `value = if_else(nchar(value) == 8, mdy(value), dmy(value))`.
  32. Caused by warning:
  33. ! 1 failed to parse.
  34. ---
  35. Backtrace:
  36. 1. ├─df %>% ...
  37. 2. ├─dplyr::mutate(...)
  38. 3. └─dplyr:::mutate.data.frame(...)


不知道警告告诉我什么,因为它声称1未能解析,但它似乎所有4解析正确。

atmip9wb

atmip9wb1#

我曾经遇到过类似的情况,我认为发生的情况是if_else()对整个向量(而不仅仅是逻辑子集)执行每个操作,然后丢弃不相关的部分。
我很想知道为什么会这样,尤其是在性能方面,这种行为似乎并不有益。

相关问题