You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:42:04