Как найти пациента по крайней мере с двумя значениями HbA1 c с интервалом более 6,5 с интервалом не менее двух лет с использованием R - PullRequest
1 голос
/ 20 марта 2020

Теперь у меня есть набор данных, содержащий идентификатор пациента, год измерения HbA1 c и значение HbA1 c.

  1. Я хочу найти PATIENT_ID, у которого было по крайней мере два измерения HbA1 c> = 6,5, по крайней мере, два года. Я хотел бы получить набор данных с PATIENT_ID и первый раз HbA1 c> = 6,5 и значением HbA1 c.

  2. Я хочу найти PATIENT_ID и дату и значение Hba1 c, строка, в которой в последний раз HbA1 c> = 6,5 для пациента (среднее значение, после которого весь HbA1 c будет> = 6,5 для пациента).

Большое спасибо.

df <- data.frame(PATIENT_ID=c(1,1,1,2,2,2,3,3),
                 TEST_DATE=c(2001,2001,2006,2002,2004,2006,2001,2006),
                 HbA1c=c(6.4,6.5,6.3,6.7,6.1,6.9,6.7,7.0))

Ожидаемый результат:

(1)

df <- data.frame(PATIENT_ID=c(2,3),
             TEST_DATE=c(2002,2001),
             HbA1c=c(6.7,6.7))

(2)

df <- data.frame(PATIENT_ID=c(2,3),
                 TEST_DATE=c(2006,2001),
                 HbA1c=c(6.9,6.7))

Ответы [ 2 ]

0 голосов
/ 20 марта 2020
library(dplyr)
df %>%
  arrange(TEST_DATE) %>%
  filter(HbA1c >= 6.5) %>%
  group_by(PATIENT_ID) %>%
  filter(diff(range(TEST_DATE)) >= 2) %>%
  slice(1) %>%
  ungroup()
# # A tibble: 2 x 3
#   PATIENT_ID TEST_DATE HbA1c
#        <dbl>     <dbl> <dbl>
# 1          2      2002   6.7
# 2          3      2001   6.7

df %>%
  arrange(TEST_DATE) %>%
  group_by(PATIENT_ID) %>%
  filter(rev(cumall(rev(HbA1c >= 6.5)))) %>%
  slice(1) %>%
  ungroup()
# # A tibble: 2 x 4
# # Groups:   PATIENT_ID [2]
#   PATIENT_ID TEST_DATE HbA1c a    
#        <dbl>     <dbl> <dbl> <lgl>
# 1          2      2006   6.9 TRUE 
# 2          3      2001   6.7 TRUE 
0 голосов
/ 20 марта 2020

Использование dplyr:

library(dplyr)

Ответ 1:

df %>%
  group_by(PATIENT_ID) %>%
  slice(if (sum(HbA1c > 6.5) >= 2) which.max(HbA1c > 6.5) else 0)

#  PATIENT_ID TEST_DATE HbA1c
#       <dbl>     <dbl> <dbl>
#1          2      2002   6.7
#2          3      2001   6.7

Ответ 2:

df %>%
  group_by(PATIENT_ID) %>%
  mutate(temp = cumsum(HbA1c < 6.5)) %>%
  slice(if(last(HbA1c) >= 6.5) which.max(temp == max(temp) & HbA1c >= 6.5) else 0) %>%
  select(-temp)

#  PATIENT_ID TEST_DATE HbA1c
#       <dbl>     <dbl> <dbl>
#1          2      2006   6.9
#2          3      2001   6.7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...