在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
相关产品推荐
相关产品推荐

