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

R语言:将特定格式字符日期列转为日期类型且避免生成NA值

问题描述

现有如下结构的R数据框,其中Start_Date和End_Date为字符型日期列,尝试转换为日期类型时部分值出现NA,期望最终输出格式为mm/dd/yyyy:

structure(list(Start_Date = c("Dec 12, 2017", "Oct 19, 2022","Oct 3, 2022"), 
               End_Date = c("Dec 25, 2017", "Dec 19, 2022",  "Dec 1, 2022"), 
               Completion = c("100% completed", "34% completed",  "62% completed")), 
          row.names = c(NA, -3L), class = c("tbl_df",  "tbl", "data.frame"))
解决方案

出现NA的核心原因是日期格式指定错误——未兼容日部分为单数字的情况(如Oct 3, 2022),以下两种方法可完美解决:

方法1:使用lubridate包(推荐)

lubridate能自动识别多种日期格式,无需手动匹配格式字符串,对单/双数字日期均兼容:

# 安装并加载包
install.packages("lubridate")
library(lubridate)

# 加载数据
df <- structure(list(Start_Date = c("Dec 12, 2017", "Oct 19, 2022","Oct 3, 2022"), 
               End_Date = c("Dec 25, 2017", "Dec 19, 2022",  "Dec 1, 2022"), 
               Completion = c("100% completed", "34% completed",  "62% completed")), 
          row.names = c(NA, -3L), class = c("tbl_df",  "tbl", "data.frame"))

# 转换为日期类型
df$Start_Date <- mdy(df$Start_Date)
df$End_Date <- mdy(df$End_Date)

# 若需转为`mm/dd/yyyy`字符格式,执行以下步骤
df$Start_Date <- format(df$Start_Date, "%m/%d/%Y")
df$End_Date <- format(df$End_Date, "%m/%d/%Y")

方法2:使用base R的as.Date函数

需指定正确的格式字符串:%b匹配月份缩写,%d兼容单/双数字日,%Y匹配4位年份:

# 加载数据
df <- structure(list(Start_Date = c("Dec 12, 2017", "Oct 19, 2022","Oct 3, 2022"), 
               End_Date = c("Dec 25, 2017", "Dec 19, 2022",  "Dec 1, 2022"), 
               Completion = c("100% completed", "34% completed",  "62% completed")), 
          row.names = c(NA, -3L), class = c("tbl_df",  "tbl", "data.frame"))

# 转换为日期类型
df$Start_Date <- as.Date(df$Start_Date, format = "%b %d, %Y")
df$End_Date <- as.Date(df$End_Date, format = "%b %d, %Y")

# 格式化为`mm/dd/yyyy`字符格式
df$Start_Date <- format(df$Start_Date, "%m/%d/%Y")
df$End_Date <- format(df$End_Date, "%m/%d/%Y")
转换结果

最终数据框如下:

# A tibble: 3 × 3
  Start_Date End_Date   Completion    
  <chr>      <chr>      <chr>         
1 12/12/2017 12/25/2017 100% completed
2 10/19/2022 12/19/2022 34% completed 
3 10/03/2022 12/01/2022 62% completed 

注:若需保留日期类型而非字符类型,跳过format()步骤即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:10:28