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

如何拆分含缺失日期部分的日期列,让年份处于正确列?

解决R语言separate拆分日期列时年份错位的问题

你的问题核心是release_date列混合了两种格式:前两行是日/月/年结构,第三行仅包含年份。默认调用separate时,会按/直接拆分,导致第三行的年份被错误分到day列,而前两行的年份在year列,最终字段对应混乱。

以下是两种可行的解决方法:

方法1:先统一日期格式再拆分

先将仅含年份的条目补全为完整的日/月/年格式(比如默认补01/01/前缀),再用separate拆分:

library(tidyr)
df <- data.frame(ID=1:3, release_date=c('01/01/2020','22/06/2020','2019'))

# 统一日期格式:无分隔符的年份补01/01/前缀
df$release_date <- ifelse(
  grepl("/", df$release_date),
  df$release_date,
  paste0("01/01/", df$release_date)
)

# 拆分列
df2 <- separate(data = df, col = release_date, into = c("day", "month", "year"))

拆分后结果:

ID day month year
1  1  01    01 2020
2  2  22    06 2020
3  3  01    01 2019

方法2:用extract通过正则匹配直接提取

使用tidyr::extract,借助正则表达式匹配两种日期格式,直接将年份提取到year列,日和月按需处理:

library(tidyr)
df <- data.frame(ID=1:3, release_date=c('01/01/2020','22/06/2020','2019'))

# 正则匹配:可选的日/月/ 前缀 + 必有的年份
df2 <- extract(
  df, 
  release_date, 
  into = c("day", "month", "year"),
  regex = "(?:(\\d{2})/(\\d{2})/)?(\\d{4})",
  remove = TRUE
)

# 可选:将日/月的NA替换为默认值(比如01)
df2$day <- ifelse(is.na(df2$day), "01", df2$day)
df2$month <- ifelse(is.na(df2$month), "01", df2$month)

这种方法无需修改原数据,直接通过正则精准提取对应字段,适合格式混杂的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:48:14