[EDITED 4/4/2020] Это мой первый пост на stackoverflow, и я новый пользователь R. Пожалуйста, прости меня за любые ошибки. Я использую R 3.6.2 с Rstudio. В этом наборе данных я надеюсь найти способ хранить уникальные регистрационные номера в течение каждого квартала года. Многие люди принимают несколько лекарств в одном квартале, я хочу знать, кто принимал какие-либо лекарства в каждом квартале. Таким образом, уникальные идентификаторы в течение каждого квартала года.
> Df<-data.frame(ID= c("123", "456", "123", "789", "123", "456", "789", "123", "789"),
+ Drug= c("A", "B", "C", "A", "A", "A", "B", "B", "A"),
+ Administered= c("2017 Q1", "2018 Q1", "2017 Q3", "2017 Q1", "2017 Q1", "2018 Q3", "2018 Q1", "2017 Q1", "2018 Q1"))
>
> dput(Df) ##Generating dput format
structure(list(ID = structure(c(1L, 2L, 1L, 3L, 1L, 2L, 3L, 1L,
3L), .Label = c("123", "456", "789"), class = "factor"), Drug = structure(c(1L,
2L, 3L, 1L, 1L, 1L, 2L, 2L, 1L), .Label = c("A", "B", "C"), class = "factor"),
Administered = structure(c(1L, 3L, 2L, 1L, 1L, 4L, 3L, 1L,
3L), .Label = c("2017 Q1", "2017 Q3", "2018 Q1", "2018 Q3"
), class = "factor")), class = "data.frame", row.names = c(NA,
-9L))
>
> str(Df) ##demonstrating structure of data
'data.frame': 9 obs. of 3 variables:
$ ID : Factor w/ 3 levels "123","456","789": 1 2 1 3 1 2 3 1 3
$ Drug : Factor w/ 3 levels "A","B","C": 1 2 3 1 1 1 2 2 1
$ Administered: Factor w/ 4 levels "2017 Q1","2017 Q3",..: 1 3 2 1 1 4 3 1 3
>
> print(Df) ##Before removing duplicates
ID Drug Administered
1 123 A 2017 Q1
2 456 B 2018 Q1
3 123 C 2017 Q3
4 789 A 2017 Q1
5 123 A 2017 Q1
6 456 A 2018 Q3
7 789 B 2018 Q1
8 123 B 2017 Q1
9 789 A 2018 Q1
>
> library(tidyverse) ##Loading tidyverse for distinct function to remove duplicates
>
> Df %>% distinct(ID, .keep_all=TRUE) ##Removed duplicate enteries but wanted to remove duplicates IDs within each Year Quarter
ID Drug Administered
1 123 A 2017 Q1
2 456 B 2018 Q1
3 789 A 2017 Q1
>
> ##Generating the end result dataset desired where only duplicate ID's within each quarter are removed
> dfend<-data.frame(ID= c("123", "456", "123", "789", "456", "789"),
+ Drug= c("A", "B", "C", "A", "A", "B"),
+ Administered= c("2017 Q1", "2018 Q1", "2017 Q3", "2017 Q1", "2018 Q3", "2018 Q1"))
>
> print(dfend)
ID Drug Administered
1 123 A 2017 Q1
2 456 B 2018 Q1
3 123 C 2017 Q3
4 789 A 2017 Q1
5 456 A 2018 Q3
6 789 B 2018 Q1
Итак, как вы можете видеть, когда я использовал функцию дублирования, она удаляла все дубликаты ID, а я хотела удалить только дубликаты в течение того же квартала года. Я указал желаемый результат в кадре данных dfend, где случаи 5, 8 и 9 были удалены, поскольку они были дублирующими идентификаторами в том же квартале года. Эти данные являются образцом, который я создал на основе моего исходного набора данных, который содержит> 1500 записей. Я хотел бы иметь возможность применить функцию для достижения таких результатов в большом наборе данных. Я надеюсь, что это редактирование лучше объясняет, что я ищу. Извиняюсь за предыдущий пост, потихоньку учусь.
Спасибо!