我在数据框中有一个源列,其中日期可能是“dd.mm.yyyy”格式或 5 位数字的 Excel 格式。因此,我想检查ifelse元素的外观str_detect,然后为每个元素使用适当的转换。
df$date <- ifelse(str_detect(df$date, "[0-9]{2}.[0-9]{2}.[0-9]{4}") == TRUE,
as.Date(df$date, format = "%d.%m.%Y"),
as.Date(as.numeric(df$date), origin = "1899-12-30"))
虽然这两个转换函数都按预期工作,但当我将它们放入ifelse语句时,我得到了奇怪的结果——基本上 2019 年 1 月 1 日变成了“17897”。有人可以解释为什么会发生这种情况以及我如何让它发挥作用吗?谢谢
编辑:代码片段
df <- c("01.01.2019", "43867")
df <- ifelse(str_detect(df, "[0-9]{2}.[0-9]{2}.[0-9]{4}") == TRUE,
as.Date(df, format = "%d.%m.%Y"),
as.Date(as.numeric(df), origin = "1899-12-30"))
期望的输出:"2019-01-01" "2020-02-06"
结果输出 17897 18298
如果我在没有 的情况下应用第一个(是)函数ifelse,我将得到"2019-01-01" NA,并且没有函数导致NA "2020-02-06"