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

在R语言中批量修改多个日期列格式且不新增列的问题

R批量修改现有日期列格式方案

你使用across()批量修改列的逻辑本身是正确的,mutate()配合across()指定现有列名的写法,默认就是直接覆盖原列,不会额外生成新列。如果运行后没有达到预期效果,通常是类型不匹配导致的:你现有代码中format()函数返回的是字符串类型,如果你需要的是日期类型的列,调整转换逻辑即可。

场景1:需要输出字符串格式的YYYY-MM-DD日期

你提供的原始代码已经可以实现需求,运行后生成的format_dt中doc_dt、ship_dt两列已经是目标格式,没有新增列。可增加all_of()避免dplyr的变量识别警告:

library(dplyr)
doc_dt <- c('04/22/2021 00:00:00', '05/15/2021 00:00:00')
ship_dt <- c('04/24/2021 00:00:00', '05/18/2021 00:00:00')
qty <- c(10, 20)

df_dt <- data.frame(doc_dt,ship_dt, qty)
col_dt <- c('doc_dt','ship_dt')

format_dt <- df_dt %>%
mutate(
across(all_of(col_dt), ~ format(as.POSIXct(.x, format="%m/%d/%Y %H:%M:%S"),"%Y-%m-%d"))
)

场景2:需要输出Date类型的日期(可直接用于后续日期计算)

将转换逻辑调整为直接转为Date类型即可:

format_dt <- df_dt %>%
mutate(
across(all_of(col_dt), ~ as.Date(as.POSIXct(.x, format="%m/%d/%Y %H:%M:%S")))
)

如果不需要保留原数据框,直接将赋值左侧替换为df_dt,即可直接修改原数据集的列,不会生成新对象。


内容的提问来源于stack exchange,提问作者user1765608

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:57:03