首页 > 解决方案 > Eliminate duplicates based on conditions from several columns in R

问题描述

This is my dataset:

df <- data.frame(PatientID = c("3454","3454","3454","345","345","345"), date = c("05/01/2001", "02/06/1997", "29/03/2004", "05/2/2021", "01/06/1960", "29/03/2003"),
                 infarct1 = c(TRUE, NA, TRUE, NA, NA, TRUE),infarct2 = c(TRUE, TRUE, TRUE, TRUE, NA, TRUE,  stringsAsFactors = F)

Basically I need to keep just 1 patient ID (aka, eliminate duplicated PatientID), based on the most recent infarct (last infarct==TRUE [but any kind of infarct] based on date).

So the outcome I want would look like:

 df <- data.frame(PatientID = c("3454","345"), date = c("29/03/2004", "05/2/2021"),
                     infarct = c(TRUE,TRUE), stringsAsFactors = F)

Hope this makes sense.

Thanks

标签: rduplicatesconditional-statementsconditional-formatting

解决方案


Try this:

library(dplyr)

df <- df %>% 
  mutate(infarct = infarct1 | infarct2) %>%
  filter(infarct == TRUE) %>%
  group_by(PatientID, infarct) %>%
  summarise(date=max(date))
  1. Create infarct variable.
  2. Filter TRUE infarct.
  3. Group.
  4. Look for last time.

推荐阅读