我有一个带有字符列的数据框,其日期格式有两种不同的方式,一种是 mm/dd/yy,另一种是 dd/mm/yyyy,所以我想使用 lubridate 来解析它们,条件是数量角色。
x <- c("01/11/24", "17/11/2023", "02/25/24", "01/03/2022")
df <- as_tibble(x)
new_df <- df %>% mutate(value = if_else(nchar(value) == 8, mdy(value), dmy(value)))
这似乎会产生正确的日期列,但它会生成此警告:
new_df
# A tibble: 4 × 1
value
<date>
1 2024-01-11
2 2023-11-17
3 2024-02-25
4 2022-03-01
Warning message:
There were 2 warnings in `mutate()`.
The first warning was:
ℹ In argument: `value = if_else(nchar(value) == 8, mdy(value), dmy(value))`.
Caused by warning:
! 1 failed to parse.
ℹ Run dplyr::last_dplyr_warnings() to see the 1 remaining warning.
> dplyr::last_dplyr_warnings()
[[1]]
<warning/rlang_warning>
Warning in `mutate()`:
ℹ In argument: `value = if_else(nchar(value) == 8, mdy(value), dmy(value))`.
Caused by warning:
! 1 failed to parse.
---
Backtrace:
▆
1. ├─df %>% ...
2. ├─dplyr::mutate(...)
3. └─dplyr:::mutate.data.frame(...)
[[2]]
<warning/rlang_warning>
Warning in `mutate()`:
ℹ In argument: `value = if_else(nchar(value) == 8, mdy(value), dmy(value))`.
Caused by warning:
! 1 failed to parse.
---
Backtrace:
▆
1. ├─df %>% ...
2. ├─dplyr::mutate(...)
3. └─dplyr:::mutate.data.frame(...)
不确定警告告诉我什么,因为它声称 1 个无法解析,但似乎所有 4 个都已正确解析。
我曾经遇到过类似的情况,我认为发生的情况是
if_else()
对整个向量(不仅仅是逻辑子集)执行每个操作,然后才丢弃不相关的部分。
我很想知道为什么会出现这种情况,特别是在性能方面,这种行为似乎没有好处。