首页 > 解决方案 > 如何使用 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 的数据集。谢谢你。

标签: r

解决方案


按‘PATIENT_ID’分组后,filterHbA1c值大于等于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,]

或者另一个选项tablebase 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))

推荐阅读