Выбор строк, которые удовлетворяют условию в зависимости от других строк в R - PullRequest
0 голосов
/ 20 сентября 2019

Я работаю в R, чтобы определить случаи заболевания.Каждый пациент имеет несколько посещений в течение нескольких лет (каждая строка данных представляет собой одно посещение), и для обозначения «инцидента» посещение должно соответствовать следующим критериям:

  • Тест на инфекцию должен бытьположительный (Инфекция == "да")
  • Этот пациент еще не был "положительным" на инфекцию в течение последних двух лет

Мои данные выглядят так:

enter image description here

Я хочу создать новую переменную, указывающую, является ли каждое посещение случаем заражения или нет.Например, выходные данные должны выглядеть следующим образом:

enter image description here

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

Я не могу найти эффективный способ получить этот результат в R. Можетэто можно сделать с помощью dplyr?Буду признателен за любую помощь в этом.

1 Ответ

1 голос
/ 20 сентября 2019

Одним из методов является вычисление разницы во времени между событиями заражения (event_diff).Тогда incident будет, когда эта разница больше 2 лет или разница 0 (при условии, что в одну и ту же дату не было проведено несколько испытаний).Глядя на это сейчас, я подозреваю, что есть лучшие альтернативные решения для этого.

df <- data.frame(
  patient_id = c(1,1,1,1,1,1,2,2,2,2),
  infection = c("no", "yes", "yes", "no", "yes", "yes", "yes", "no", "no", "yes"),
  date = c("2005-02-22", "2005-04-26", "2005-05-06", "2006-05-22", "2007-08-19", "2007-12-15", "2005-10-24", "2005-11-11", "2006-07-12", "2007-12-01")
)

df$date <- as.Date(df$date, "%Y-%m-%d")

library(dplyr)

df %>%
  group_by(patient_id, infection) %>%
  mutate(event_diff = coalesce(date - lag(date), 0)) %>%
  mutate(incident = ifelse(infection == "yes" & (event_diff == 0 | event_diff > (365*2)), "yes", "no"))

   patient_id infection date       event_diff incident
        <dbl> <fct>     <date>     <drtn>     <chr>   
 1          1 no        2005-02-22   0 days   no      
 2          1 yes       2005-04-26   0 days   yes     
 3          1 yes       2005-05-06  10 days   no      
 4          1 no        2006-05-22 454 days   no      
 5          1 yes       2007-08-19 835 days   yes     
 6          1 yes       2007-12-15 118 days   no      
 7          2 yes       2005-10-24   0 days   yes     
 8          2 no        2005-11-11   0 days   no      
 9          2 no        2006-07-12 243 days   no      
10          2 yes       2007-12-01 768 days   yes     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...