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

如何利用完整日期采样值转换数据集中的不完整日期?

基于已有完整日期采样补全缺失日期并转换为Date类型

数据情况

我拥有一个大型数据集,以下是其.csv格式的代表性示例:

date, x, y
"03082018", 304, 1
"071999", 305, 1
"04032018", 309, 2
"041997", 400, 0
"05081999", 306, 1
"22052000", 201, 1
"16092002", 201, 1
"121997", 101, 1
"26051999", 203, 1
"16012003", 202, 1
"101998", 300, 2
"02012010", 201, 2
"02112018", 310, 2
"111997", 101, 1
"20032004", 101, 1

数据框中date字段以字符类型存储,另有包含20000行数据的样本可供参考。

问题需求

我需要将date列转换为Date类型,这就需要补全缺失的日或日与月信息。原数据集date列的日期格式分为8位、6位或4位数字,月份范围为01-12,年份范围是1996-2022。

我不想随意赋值缺失值,而是希望从已有完整日期中采样补全:

  • 当date为2001(仅年份)时,从所有ddmm2001格式的完整日期中随机采样替换;
  • 当date为061997(月+年)时,从所有dd061997格式的完整日期中随机采样替换。

已尝试方案

最初我固定将缺失的日设为15、缺失的月设为06,代码如下:

df |>
  mutate(
    date_new = case_when(
      str_length(date) == 6 ~ str_c("15", date),
      str_length(date) == 4 ~ str_c("1506", date),
      .default = date
    )
  ) |>
  mutate(date_unalt = date_new == date) |> # 新增列标记日期是否未被修改
  relocate(date_new, date, date_unalt, x, y)

但这种方式会导致缺失值过度集中在某一日期,不是理想方案。我也考虑过删除所有不完整值,但这些记录包含有效信息,所以更倾向于引入“可控噪声”来保留信息。

已查阅但未解决问题的相关线程

我看过以下Stack Overflow线程,但都没能解决我的特定问题:

  • 如何将不完整日期转换为Date格式?
  • 如何转换无日的Y-m格式日期?
  • 将年月("yyyy-mm"格式)转换为日期?
  • 如何从数据库中筛选日期数字、不完整日期和NA并转换为统一的Date类型?
  • 无法将年月字符串转换为R中的日期?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:28:10