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

如何在R中转换多格式字符日期列并计算间隔小时数?

解决方案

可以借助lubridate和dplyr包批量处理这些格式混杂的日期与小时数据,以下是完整实现代码:

library(dplyr)
library(lubridate)
library(stringr)

# 加载数据集
df <- structure(list(Dates = c("1h", "10 Std.", "Apr 5", "Dec 8, 2022", 
"May 30, 2019", "6. Juni 2021", NA, "15. März", "13. Aug. 2019"
)), class = "data.frame", row.names = c(NA, -9L))

# 设置德语区域,用于解析德式日期
locale("de_DE.UTF-8")

result_df <- df %>%
  mutate(
    # 提取小时格式的数字值
    hour_val = case_when(
      str_detect(Dates, "^\\d+h$") ~ as.numeric(str_extract(Dates, "\\d+")),
      str_detect(Dates, "^\\d+ Std\\.$") ~ as.numeric(str_extract(Dates, "\\d+")),
      TRUE ~ NA_real_
    ),
    # 解析各类日期格式,补全缺失年份
    parsed_date = case_when(
      # 带年份的德式日期(如6. Juni 2021、13. Aug. 2019)
      str_detect(Dates, "^\\d+\\. \\w+.*\\d{4}$") ~ dmy(Dates, locale = "de_DE.UTF-8"),
      # 无年份的德式日期(如15. März)
      str_detect(Dates, "^\\d+\\. \\w+$") ~ dmy(paste0(Dates, " ", year(today())), locale = "de_DE.UTF-8"),
      # 带年份的英式日期(如Dec 8, 2022)
      str_detect(Dates, "^\\w+ \\d+, \\d{4}$") ~ mdy(Dates),
      # 无年份的英式日期(如Apr 5)
      str_detect(Dates, "^\\w+ \\d+$") ~ mdy(paste0(Dates, ", ", year(today()))),
      TRUE ~ NA_Date_
    ),
    # 生成最终的Dates列:小时行保留原字符串,日期行转为yyyy-mm-dd格式
    final_dates = case_when(
      !is.na(hour_val) ~ Dates,
      !is.na(parsed_date) ~ format(parsed_date, "%Y-%m-%d"),
      TRUE ~ NA_character_
    ),
    # 计算Time_since列
    Time_since = case_when(
      !is.na(hour_val) ~ hour_val,
      !is.na(parsed_date) ~ as.numeric(difftime(today(), parsed_date, units = "hours")),
      TRUE ~ NA_real_
    )
  ) %>%
  select(Dates = final_dates, Time_since)

# 打印结果(NA显示为"NA")
print(result_df, na.print = "NA")

关键逻辑说明

  1. 小时格式识别:通过正则匹配Xh和X Std.两种模式,提取数字作为小时数。
  2. 日期解析与补全:
    • 德式日期用dmy()结合德语区域解析,无年份的自动补充当前年份;
    • 英式日期用mdy()解析,无年份的同样补充当前年份。
  3. 格式统一:将解析后的日期转为yyyy-mm-dd标准格式,小时类数据保留原字符串。
  4. 时间间隔计算:日期类数据计算与当前日期的小时差,小时类数据直接使用提取的数值。

注意:若系统不支持de_DE.UTF-8区域,可尝试替换为本地支持的德语区域标识(如"de_DE")。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 16:52:36