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

如何在R中为spread()生成的宽表添加日期归属状态列?

R中新增预约状态列的解决方案

核心思路

先基于现有日期列计算max_appointment_date,再通过匹配该日期对应的原始列,生成对应的中文状态标签(完成/已预约/取消)。

代码实现

先加载dplyr包(未安装的话先运行install.packages("dplyr")),再处理数据:

library(dplyr)

# 示例宽表(替换为你的实际数据)
df <- tibble(
  cancelled = as.Date(c("2022-10-17", NA, "2022-08-01")),
  Completed = as.Date(c("2022-10-10", "2022-09-20", NA)),
  Scheduled = as.Date(c("2022-09-05", NA, "2022-07-15"))
)

# 生成目标列
df_processed <- df %>%
  mutate(
    # 计算最大预约日期:优先取Completed/Scheduled的最大值,无值则取cancelled
    max_appointment_date = pmax(Completed, Scheduled, na.rm = TRUE),
    max_appointment_date = ifelse(is.na(max_appointment_date), cancelled, max_appointment_date),
    max_appointment_date = as.Date(max_appointment_date, origin = "1970-01-01"),
    
    # 匹配对应的状态标签
    max_appointment_status = case_when(
      max_appointment_date == Completed ~ "完成",
      max_appointment_date == Scheduled ~ "已预约",
      max_appointment_date == cancelled ~ "取消",
      TRUE ~ NA_character_
    )
  )

结果说明

运行后得到的df_processed会包含目标列,示例输出如下:

cancelledCompletedScheduledmax_appointment_datemax_appointment_status
2022-10-172022-10-102022-09-052022-10-10完成
NA2022-09-20NA2022-09-20完成
2022-08-01NA2022-07-152022-08-01取消

注意事项

  • 若Completed和Scheduled日期相同,case_when会优先匹配第一个条件(标记为"完成"),可根据需求调整条件顺序。
  • 确保所有日期列的类型为Date,否则需先用as.Date()转换格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:55:17