Удаление лиц из данных когортного исследования на основе базовых характеристик - PullRequest
3 голосов
/ 27 июня 2019

У меня есть данные о состоянии здоровья из когортного исследования с повторными измерениями, где людей посещают несколько раз в год. В начале исследования (посещение 0) у некоторых людей уже диагностирована интересующая болезнь, а у других нет. Поскольку я смотрю на случаи инцидентов в своем анализе, мне нужно удалить из моих данных тех людей, которые были диагностированы как «больные» на 0 посещении. Как я могу сделать это в Tidyverse? Ниже приведен пример структуры данных, на которую я буду смотреть:

subject_id <- c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5)
visit <- c(0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3)
diagnosis <- c("not sick", "not sick", "not sick", "sick", "sick", "sick", "sick", "sick", "not sick", "not sick", "sick", "sick", "sick", "sick", "sick", "sick", "not sick", "not sick", "not sick", "sick")

cohort <- data.frame(subject_id, visit, diagnosis)
cohort

Ответы [ 3 ]

2 голосов
/ 27 июня 2019

РЕДАКТИРОВАТЬ : Если вы хотите полностью удалить их, то:

cohort %>% 
  group_by(subject_id) %>% 
  mutate(Condn = ifelse(visit==0 & diagnosis=="sick",1,0) ) %>% 
  filter(all(Condn==0))

ORIGINAL

Мы можем сделать:

cohort %>% 
  group_by(subject_id) %>% 
   mutate(Condn = ifelse(visit==0 & diagnosis=="sick",1,0) ) %>% 
   filter(Condn==0) %>% 
   ungroup()  %>% 
   select(-Condn)
1 голос
/ 27 июня 2019

С dplyr вы можете сделать:

cohort %>%
 group_by(subject_id) %>%
 filter(first(diagnosis) != "sick")

   subject_id visit diagnosis
        <dbl> <dbl> <fct>    
 1          1     0 not sick 
 2          1     1 not sick 
 3          1     2 not sick 
 4          1     3 sick     
 5          3     0 not sick 
 6          3     1 not sick 
 7          3     2 sick     
 8          3     3 sick     
 9          5     0 not sick 
10          5     1 not sick 
11          5     2 not sick 
12          5     3 sick   

Или:

cohort %>%
 group_by(subject_id) %>%
 filter(diagnosis[row_number() == 1] != "sick")
0 голосов
/ 27 июня 2019

Спасибо всем за советы. @tmfmnk и @NelsonGon предоставили опции, которые работали для этой задачи.

Я недавно перешел из SAS в R, и это было чрезвычайно полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...