R语言如何优雅修改数据框内lubridate类型日期的指定错误年份
代码失效原因
你原有写法未生效的核心问题是赋值右侧使用了字符串类型的"2019",lubridate的year()赋值接口仅接受数值型输入,类型不匹配导致修改未执行。
不需要使用map函数也能快速实现需求,直接用向量操作性能最高,也可以按你的需求提供map实现方案:
解法1:基础向量操作(最推荐,性能最优)
直接修正你原有代码的类型问题即可:
library(lubridate) year(ped_2019$Date[year(ped_2019$Date) == 2017]) <- 2019
解法2:tidyverse风格写法(可读性更高)
如果习惯用dplyr管道流,可以这么写:
library(dplyr) library(lubridate) ped_2019 <- ped_2019 %>% mutate(Date = if_else( condition = year(Date) == 2017, true = `year<-`(Date, 2019), false = Date ))
解法3:map函数实现(满足自定义需求)
如果一定要使用purrr的map函数也可实现,但对于这类向量化操作性能不如直接操作向量,参考写法:
library(purrr) library(lubridate) ped_2019$Date <- map_dbl(ped_2019$Date, function(x) { if (year(x) == 2017) year(x) <- 2019 return(x) }) %>% as_date()
内容的提问来源于stack exchange,提问作者csharpvsto
相关产品推荐
相关产品推荐

