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

如何按规则计算数据集的Delta1、Delta2时间差值列

数据集新增Delta计算列实现方法

原始数据集样例

ID    Type    Time1     Time2     Time3
1     A1      12.23     NA        NA
2     A1       0.35     0.53      NA
2     A2       5.78     NA        10.25
3     A5       NA       NA        4.19
4     A3       NA       3.18      7.15
5     A5       10.91    4.56      2.45

明确计算规则

  • Delta1:仅当同一行内Time1、Time2、Time3三个值均非缺失时,取值为Time2 - Time1,其余行该列留空。例如ID=5的行三个时间值均存在,Delta1 = 4.56-10.91 = -6.35
  • Delta2:按行内非缺失时间值的组合计算差值:仅存在Time1+Time2非空时取Time2-Time1,仅存在Time1+Time3非空时取Time3-Time1,仅存在Time2+Time3非空时取Time3-Time2,三个值均非空时取Time3-Time2;如果行内非缺失时间值不足2个,取值为0

期望输出效果

ID    Type    Time1     Time2     Time3     Delta1     Delta2
1     A1      12.23     NA        NA                   0
2     A1       0.35     0.53      NA                   0.18
2     A2       5.78     NA        10.25                4.47  
3     A5       NA       NA        4.19                 0
4     A3       NA       3.18      7.15                 3.97
5     A5       10.91    4.56      2.45      -6.35     -2.11

R语言实现代码(基于dplyr)

按行判断缺失情况匹配计算规则即可,代码可直接运行:

library(dplyr)

result_df <- raw_df %>%
  rowwise() %>%
  mutate(
    # 计算Delta1
    Delta1 = ifelse(all(!is.na(c(Time1, Time2, Time3))), Time2 - Time1, NA_real_),
    # 统计每行非缺失时间值个数,辅助计算Delta2
    valid_time_num = sum(!is.na(c(Time1, Time2, Time3))),
    Delta2 = case_when(
      valid_time_num < 2 ~ 0,
      !is.na(Time1) & !is.na(Time2) & is.na(Time3) ~ Time2 - Time1,
      !is.na(Time1) & is.na(Time2) & !is.na(Time3) ~ Time3 - Time1,
      is.na(Time1) & !is.na(Time2) & !is.na(Time3) ~ Time3 - Time2,
      TRUE ~ Time3 - Time2
    )
  ) %>%
  select(-valid_time_num) %>%
  ungroup()

运行后输出结果和预期完全一致。

内容的提问来源于stack exchange,提问作者Ahir Bhairav Orai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:01:20