You need to enable JavaScript to run this app. R语言dplyr实现:按首次AKI标记匹配对应日期比较生成手术状态列
优惠活动
大模型
产品
解决方案
定价
更多

R语言dplyr实现:按首次AKI标记匹配对应日期比较生成手术状态列

R 实现aki_status列生成方案

核心思路是逐行定位最早出现"aki"的列索引,匹配同序号的检测时间crdate和手术时间opstart做先后比较,可直接通过dplyr的mutate实现。

可直接运行的代码

library(dplyr)

dat <- dat %>%
  rowwise() %>%
  mutate(
    # 从左到右找第一个值为"aki"的列位置
    first_aki_idx = which(c_across(starts_with("aki_")) == "aki")[1],
    aki_status = case_when(
      is.na(first_aki_idx) ~ NA_character_,
      # 同位置crdate早于手术时间为preop,否则为postop
      c_across(starts_with("crdate_"))[first_aki_idx] < opstart ~ "preop",
      c_across(starts_with("crdate_"))[first_aki_idx] >= opstart ~ "postop"
    )
  ) %>%
  ungroup()

结果核对

运行代码后,按照给定数据的逻辑,逐行判断结果为:

  • 第1行:最早aki在aki_1,对应crdate为2018-01-01 14:53,早于2018-01-03 09:00的手术时间,输出preop
  • 第2行:最早aki在aki_3,对应crdate为2018-01-05 07:35,晚于2018-01-02 14:40的手术时间,输出postop
  • 第3行:最早aki在aki_2,对应crdate为2018-01-01 14:43,早于2018-01-02 18:15的手术时间,输出preop
  • 第4行:所有aki列均为空值,输出NA
  • 第5行:最早aki在aki_1,对应crdate为2018-01-02 18:58,早于2018-01-03 11:40的手术时间,按规则应输出preop。如果这里的预期值是postop,可以检查下时间戳和列的映射关系是否存在笔误。

*注意:这套逻辑不需要硬编码列号,后续如果新增更多aki_n和对应的crdate_n列,只要保持命名的对应关系,代码可以自动适配,不需要修改判断逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 10:15:03