解析多种日期格式时润滑警告

问题描述 投票:0回答:1

我有一个带有字符列的数据框,其日期格式有两种不同的方式,一种是 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 个都已正确解析。

r dplyr lubridate
1个回答
0
投票

我曾经遇到过类似的情况,我认为发生的情况是

if_else()
对整个向量(不仅仅是逻辑子集)执行每个操作,然后才丢弃不相关的部分。

我很想知道为什么会出现这种情况,特别是在性能方面,这种行为似乎没有好处。

© www.soinside.com 2019 - 2024. All rights reserved.