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

如何将R数据框中标题含date的列格式化为日期类型

问题

已将Excel表格导入R中,数据框内存在大量标题包含date的列。目前可通过以下代码将指定列格式化为日期类型:

df$date <- as.Date(as.numeric(df$date), origin = "1899-12-30")

请问如何对所有标题含date的列执行此操作?希望使用dplyr实现,示例数据框如下(实际列数远多于此):

df <- structure(list(source = c("Track", "Track", "Track", "Track", 
"Track"), sample_type = c("SQC", "DNA", "PBMC", "PBMC", "PBMC"
), collection_date = c("39646", "39654", "39643", "39644", "40389"
), collection_date2 = c("39646", "39654", "39643", "39644", "40389"
), received_date = c("39651", "39660", "39685", "39685", "40421"
), storage_date = c("39653", "39744", "39685", "39685", "40421"
)), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame"
))

解决方案

使用dplyr的mutate()结合across()函数可以批量处理匹配的列,具体代码如下:

library(dplyr)

# 批量转换所有列名包含"date"的列
df <- df %>%
  mutate(across(contains("date"), ~ as.Date(as.numeric(.x), origin = "1899-12-30")))

说明

  • contains("date"):用于筛选所有列名中包含字符串date的列;如果列名存在大小写混合(如Collection_Date),可以添加参数ignore.case = TRUE,即contains("date", ignore.case = TRUE),确保匹配到所有含日期相关的列。
  • ~ as.Date(as.numeric(.x), origin = "1899-12-30"):匿名函数,对每一列先转换为数值型,再转换为日期格式(Excel的日期原点为1899-12-30,和R的原点不同,所以需要指定origin参数)。

验证转换结果

执行完代码后,可以用str(df)查看数据框结构,确认所有目标列已转换为Date类型:

str(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:10:29