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

基于不同时间戳的患者脉搏数据±5变化检测需求

解决方法

要检测出不同访视间脉搏变化达到±5的患者,最便捷的方式是先将宽格式数据转换为长格式,再计算相邻时间点的脉搏差值,最后筛选出符合条件的患者ID。以下是具体实现步骤:

1. 加载所需包

我们需要用到dplyr进行数据处理,tidyr进行数据格式转换:

library(dplyr)
library(tidyr)

2. 构建示例数据集

ID <- c(1, 2, 3)
Puls1 <- c(55, 70, 65)
Puls2 <- c(55, 70, 80)
Puls3 <- c(80, 70, 75)

df <- data.frame(ID, Puls1, Puls2, Puls3)

3. 数据格式转换与差值计算

将宽格式数据转为长格式,按患者ID分组后计算相邻访视的脉搏差值绝对值,最后筛选出存在≥5变化的患者:

result <- df %>%
  # 转长格式,提取访视时间点(Puls1/Puls2/Puls3)和对应脉搏值
  pivot_longer(cols = starts_with("Puls"), 
               names_to = "visit", 
               values_to = "pulse") %>%
  # 按ID分组,确保每个患者的访视顺序正确
  group_by(ID) %>%
  mutate(
    # 提取访视的数字部分,用于排序
    visit_num = as.integer(sub("Puls", "", visit)),
    # 计算当前访视与上一次的脉搏差值绝对值
    pulse_diff = abs(pulse - lag(pulse))
  ) %>%
  # 按访视时间排序
  arrange(visit_num) %>%
  # 筛选出存在差值≥5的患者组
  filter(any(pulse_diff >= 5, na.rm = TRUE)) %>%
  # 去重,保留唯一的患者ID
  distinct(ID)

4. 查看结果

运行上述代码后,result会输出符合条件的患者ID:

print(result)
# A tibble: 2 × 1
     ID
  <dbl>
1     1
2     3

这与示例中的预期结果一致。

补充说明

  • 对于大型数据集,这种方法效率很高,能避免可视化带来的信息过载问题
  • 如果实际数据的访视命名规则不同(比如不是PulsX格式),只需调整pivot_longer和visit_num提取的逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:02:39