基于不同时间戳的患者脉搏数据±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
相关产品推荐
相关产品推荐

