У меня есть фрейм данных, как показано ниже
DF = structure(list(Age_visit = c(48, 48, 48, 49, 49, 77), Date_1 = c("8/6/2169 9:40", "8/6/2169 9:40",
"8/6/2169 9:41", "8/6/2169 9:42", "24/7/2169 8:31", "12/9/2169 10:30",
"19/6/2237 12:15"), Date_2 = c("NA-NA-NA NA:NA:NA", "NA-NA-NA NA:NA:NA", "NA-NA-NA NA:NA:NA",
"NA-NA-NA NA:NA:NA", "NA-NA-NA NA:NA:NA", "NA-NA-NA NA:NA:NA",
"NA-NA-NA NA:NA:NA"), person_id = c("21",
"21",
"21",
"21",
"21",
"21",
"31"
), enc_id = c("A21BC","A21BC",
"A22BC",
"A23BC",
"A24BC",
"A25BC",
"A31BC"
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
))
фрейм данных
Age_visit Date_1 Date_2 person_id enc_id
<dbl> <chr> <chr> <chr> <chr>
1 48 8/6/2169 9:40 NA-NA-NA NA:NA:NA 21 A21BC
2 48 8/6/2169 9:40 NA-NA-NA NA:NA:NA 21 A21BC
3 48 8/6/2169 9:41 NA-NA-NA NA:NA:NA 21 A22BC
4 49 8/6/2169 9:42 NA-NA-NA NA:NA:NA 21 A23BC
5 49 24/7/2169 8:31 NA-NA-NA NA:NA:NA 21 A24BC
6 77 12/9/2169 10:30 NA-NA-NA NA:NA:NA 31 A31BC
У меня есть два правила / действия, которые необходимо реализовать.
Правило-1 (шаг-1)
Сначала удалите дубликаты на основе 3 столбцов, таких как Date_1
, person_id
, enc_id
DF[!duplicated(DF[,c('Date_1','person_id','enc_id')]),] # this will remove 1st row as it's a plain straight forward duplicate
Правило-2 (шаг-2)
Из вывода шага-1 сверните рядом с дублирующимися записями (обратите внимание на крошечные различия в столбцах DATE_1
и enc_id
) на основе вовремя в одну запись, если разница во времени между этими записями меньше часа.
Например, если вы видите person_id = 21
, вы можете видеть, что после шага 1 все его значения времени Date_1
в тот же день, но разница составляет всего одну минуту (9:40 -> 9:41 -> 9:42). Поскольку это меньше часа (60 минут), мы объединяем их в одну запись и сохраняем только первую запись (для 9:40). Мы делаем эту проверку для каждого субъекта в кадре данных
Я удалил дубликаты на основе нескольких столбцов, как показано ниже
DF[!duplicated(DF[,c('Date_1','person_id','enc_id')]),]
Я ожидаю, что мой вывод будет как показано ниже
Age_visit Date_1 Date_2 person_id enc_id
<dbl> <chr> <chr> <chr> <chr>
1 48 8/6/2169 9:40 NA-NA-NA NA:NA:NA 21 A21BC
4 49 24/7/2169 8:31 NA-NA-NA NA:NA:NA 21 A24BC
5 77 12/9/2169 10:30 NA-NA-NA NA:NA:NA 31 A31BC