После группировки по 'PATIENT_ID' мы можем filter
иметь те, у которых 3 или более значения HbA1 c больше или равны 6,5, и получить 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))