r - 如何使用 R 找到至少三个 HbA1c 值超过 6.5 的患者
问题描述
我有一个包含患者 ID 和 HbA1c 的数据集。
df <- data.frame(PATIENT_ID=c(1,1,1,1,2,2,2,3,3,3),
HbA1c=c(6.4,6.5,6.7,6.5,6.7,6.1,6.9,6.7,7.0,6.4))
我想找到至少三个 HbA1c 值超过 6.5 的患者。输出应该是唯一患者 ID 和第一个 HbA1c 值大于 6.5 的数据集。谢谢你。
解决方案
按‘PATIENT_ID’分组后,filter
HbA1c值大于等于6.5的3个或以上的,我们可以得到distinct
‘PATIENT_ID’
library(dplyr)
df %>%
group_by(PATIENT_ID) %>%
filter(sum(HbA1c >= 6.5) >=3 & HbA1c >= 6.5) %>%
distinct(PATIENT_ID, .keep_all = TRUE)
# A tibble: 1 x 2
# Groups: PATIENT_ID [1]
# PATIENT_ID HbA1c
# <dbl> <dbl>
#1 1 6.5
或与slice
df %>%
filter(HbA1c >= 6.5) %>%
group_by(PATIENT_ID) %>%
filter(n() >=3) %>%
slice(1)
# A tibble: 1 x 2
# Groups: PATIENT_ID [1]
# PATIENT_ID HbA1c
# <dbl> <dbl>
#1 1 6.5
或使用data.table
library(data.table)
setDT(df)[HbA1c >= 6.5, .SD[.N >=3], PATIENT_ID][1]
# PATIENT_ID HbA1c
#1: 1 6.5
或在base R
i1 <- rowsum(+(df$HbA1c >= 6.5), df$PATIENT_ID) >=3
subset(df, PATIENT_ID %in% names(which(i1[,1])) & HbA1c >= 6.5)[1,]
或者另一个选项table
在base R
names(which(table(df$PATIENT_ID, df$HbA1c >= 6.5)[,2] >=3))
#[1] "1"
或变体table
names(which(table(subset(df, HbA1c >= 6.5)$PATIENT_ID) >=3))
推荐阅读
- java - C# 中的 BigInteger.intValue() 等价物
- python - 如何使用python发送电子邮件
- swift - 是什么导致此代码中出现“EXC_Bad_Instruction”错误?
- angular - 理解 Angular RouterLink 选择器规范中的 ":not" 语法
- angular - TypeError:无法从 kendo 库组件中设置未定义的属性“forceExpand”
- sql - 在sql中搜索RFID的最快方法
- python - ModuleNotFoundError:没有在同一个文件夹项目中命名的模块
- xamarin - 从 Gstreaming 到 VLC 的 udp 流式传输不起作用
- python - pyautogui 在知道 2 个角的特定区域创建屏幕截图
- javascript - 交互和重新组织 JSON 数据