首页 > 解决方案 > ifelse 定义正确条件的函数问题

问题描述

我无法通过搜索功能找到以下问题的答案:

为什么给定的ifelse()条件不能按我的意图工作?

我得到了一个数据集,它错误地有一个日期的开放文本字段,所以我得到了人们填写日期的多种方式。到现在为止,我真的接近了一些有用的东西,但我打算下一步是制作每个 mm/yy 条目那是在 2000 年之前,通过 ifelse 函数输入 mm/19yy 并没有给我一个正确的结果:

Dates <- c("10/19", "04/2019", "O5/1992", "03/92")

ifelse(str_length(Dates)==5 & str_sub(Dates,4,5)>20, stri_sub(Dates, 4, 3) <- 19, Dates)

结果如下所示:

[1] "10/1919"   "04/192019" "O5/191992" "19"   

虽然我希望它看起来像这样:

1] "10/19"   "04/2019" "O5/1992" "03/1992"

任何帮助都非常感谢!

标签: rdateif-statement

解决方案


这并没有给出您所显示的预期输出,但我认为最好将日期转换为标准日期,以便更容易使用它们。

Dates <- c("10/19", "04/2019", "O5/1992", "03/92")
new_Date <- as.Date(lubridate::parse_date_time(paste0('1/', Dates), c('dmY', 'dmy')))
new_Date
#[1] "2019-10-01" "2019-04-01" "1992-05-01" "1992-03-01"

然后你可以format按照你想要的方式这些日期:

format(new_Date, '%Y-%m')
#[1] "2019-10" "2019-04" "1992-05" "1992-03"

推荐阅读