удалить все идентификаторы, если два условия выполнены в R - PullRequest
0 голосов
/ 20 марта 2020

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

p_id Record_date  fvdate     Disease
 12  02-03-2017  02-03-2017   1
 12  05-03-2017  02-03-2017   0
 12  03-04-2018  02-03-2017   1
 11  04-05-2016  05-06-2017   0
 13  18-06-2017  18-06-2017   1
 13  03-05-2018  18-06-2017   0      
 13  09-09-2019  18-06-2017   0
 14  09-12-2017  03-01-2018   1

ВЫХОД, КОТОРЫЙ Я НУЖЕН

p_id  Record_date      fvdate     Disease
11    04-05-2016      05-06-2017    0
14    09-12-2017      03-01-2018    1

Заранее спасибо

1 Ответ

3 голосов
/ 20 марта 2020

Мы можем выбрать группы, в которых first Record_date отличается от fvdate для этого p_id.

library(dplyr)
df %>% group_by(p_id) %>% filter(first(Record_date) != first(fvdate))

#  p_id Record_date fvdate     Disease
#  <int> <fct>       <fct>        <int>
#1    11 04-05-2016  05-06-2017       0
#2    14 09-12-2017  03-01-2018       1

Или:

df %>% group_by(p_id) %>% filter(!any(Record_date == first(fvdate)))

данные

df <- structure(list(p_id = c(12L, 12L, 12L, 11L, 13L, 13L, 13L, 14L
), Record_date = c("02-03-2017", "05-03-2017", "03-04-2018", 
"04-05-2016", "18-06-2017", "03-05-2018", "09-09-2019", "09-12-2017"
), fvdate = c("02-03-2017", "02-03-2017", "02-03-2017", "05-06-2017", 
"18-06-2017", "18-06-2017", "18-06-2017", "03-01-2018"), Disease = c(1L, 
0L, 1L, 0L, 1L, 0L, 0L, 1L)), row.names = c(NA, -8L), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...