в Base-R. Это изменяет порядок данных, чтобы гарантировать сохранение строк с End.dates! = NA. c(1,5,6,7)
определяет, какие столбцы вы хотите проверить на дублирование.
df <- df[order(df$End.date),]
df[!duplicated(apply(df[,c(1,5,6,7)],1,data.frame)),]
ID First.name Last.name Report.year Medication Dosage Start.date End.date
4 1 John Doe 2018 ModulatorB Dosage1 2016-01-01 2018-12-31
7 1 John Doe 2021 ModulatorC <NA> 2019-01-01 2021-12-31
1 1 John Doe 2013 ModulatorA Dosage1 2013-01-01 <NA>
2 1 John Doe 2013 ModulatorA Dosage2 2013-01-01 <NA>
6 1 John Doe 2020 ModulatorC Dosage1 2019-01-01 <NA>
пример данных:
df <- structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L), First.name = c("John",
"John", "John", "John", "John", "John", "John"), Last.name = c("Doe",
"Doe", "Doe", "Doe", "Doe", "Doe", "Doe"), Report.year = c(2018L,
2021L, 2013L, 2013L, 2016L, 2019L, 2020L), Medication = c("ModulatorB",
"ModulatorC", "ModulatorA", "ModulatorA", "ModulatorB", "ModulatorC",
"ModulatorC"), Dosage = c("Dosage1", NA, "Dosage1", "Dosage2",
"Dosage1", NA, "Dosage1"), Start.date = c("2016-01-01", "2019-01-01",
"2013-01-01", "2013-01-01", "2016-01-01", "2019-01-01", "2019-01-01"
), End.date = c("2018-12-31", "2021-12-31", NA, NA, NA, NA, NA
)), row.names = c(4L, 7L, 1L, 2L, 3L, 5L, 6L), class = "data.frame")