我有一个数据框,其中的字符列有两种不同的日期格式,一种是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解析正确。
1条答案
按热度按时间atmip9wb1#
我曾经遇到过类似的情况,我认为发生的情况是
if_else()
对整个向量(而不仅仅是逻辑子集)执行每个操作,然后丢弃不相关的部分。我很想知道为什么会这样,尤其是在性能方面,这种行为似乎并不有益。