Дубликаты с использованием предыдущих данных - PullRequest
1 голос
/ 28 апреля 2020

Привет, мне нужно найти дубликаты, я прикрепил изображение набора данных и пример дубликата. Тот же идентификатор и тот же результат с предыдущими датами.

Любая помощь будет очень признательна.

Набор данных Screengrab

enter image description here

structure(list(id = c(1010001, 1010001, 1010001, 1010001, 1010001, 
1010001, 1010001, 1010001, 1010001, 1010001, 1010001, 1010001, 
1010001, 1010001, 1010001, 1010001, 1010001, 1010001, 1010001, 
1010001, 1010001, 1010001, 1010001, 1010001, 1010001, 1010001, 
1010001, 1010001, 1010001), DateCollected = structure(c(1145664000, 
1145750400, 1145836800, 1145923200, 1146009600, 1146096000, 1146096000, 
1146096000, 1146096000, 1146096000, 1146096000, 1146182400, 1146268800, 
1146355200, 1146441600, 1146528000, 1146614400, 1146700800, 1146787200, 
1146787200, 1146787200, 1146787200, 1146787200, 1146787200, 1146873600, 
1146960000, 1147046400, 1147132800, 1147219200), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), Test = c("Tacrolimus (FK506)", "Tacrolimus (FK506)", 
"Tacrolimus (FK506)", "Tacrolimus (FK506)", "Tacrolimus (FK506)", 
"Tacrolimus (FK506)", "Tacrolimus (FK506)", "Tacrolimus (FK506)", 
"Tacrolimus (FK506)", "Tacrolimus (FK506)", "Tacrolimus (FK506)", 
"Tacrolimus (FK506)", "Tacrolimus (FK506)", "Tacrolimus (FK506)", 
"Tacrolimus (FK506)", "Tacrolimus (FK506)", "Tacrolimus (FK506)", 
"Tacrolimus (FK506)", "Tacrolimus (FK506)", "Tacrolimus (FK506)", 
"Tacrolimus (FK506)", "Tacrolimus (FK506)", "Tacrolimus (FK506)", 
"Tacrolimus (FK506)", "Tacrolimus (FK506)", "Tacrolimus (FK506)", 
"Tacrolimus (FK506)", "Tacrolimus (FK506)", "Tacrolimus (FK506)"
), Result = c(3, 4.1, 5.9, 8.1, 4.6, 7, 7.8, 11.2, 18.1, 18.4, 
27, 4, 7.8, 8.4, 8.4, 6.1, 6.8, 5.4, 5.4, 6.5, 6.7, 8.1, 14.2, 
32.4, 7.2, 8.6, 8.9, 7.2, 9.6), Units = c("ug/L", "ug/L", "ug/L", 
"ug/L", "ug/L", "ug/L", "ug/L", "ug/L", "ug/L", "ug/L", "ug/L", 
"ug/L", "ug/L", "ug/L", "ug/L", "ug/L", "ug/L", "ug/L", "ug/L", 
"ug/L", "ug/L", "ug/L", "ug/L", "ug/L", "ug/L", "ug/L", "ug/L", 
"ug/L", "ug/L")), row.names = c(NA, -29L), class = c("tbl_df", 
"tbl", "data.frame"))

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Мы можем написать функцию для вычисления разницы между значением Result и возвращаемыми индексами строк при обнаружении дубликата.

find_duplicates <- function(x) {
  inds <- which(diff(x) == 0)
  sort(unique(c(inds, inds + 1)))
}

Мы можем применить эту функцию по группам.

Чтобы получить повторяющиеся строки, мы можем сделать:

library(dplyr)
df %>% group_by(id) %>% slice(find_duplicates(Result))

#      id DateCollected       Test               Result Units
#    <dbl> <dttm>              <chr>               <dbl> <chr>
#1 1010001 2006-04-30 00:00:00 Tacrolimus (FK506)    8.4 ug/L 
#2 1010001 2006-05-01 00:00:00 Tacrolimus (FK506)    8.4 ug/L 
#3 1010001 2006-05-04 00:00:00 Tacrolimus (FK506)    5.4 ug/L 
#4 1010001 2006-05-05 00:00:00 Tacrolimus (FK506)    5.4 ug/L 

Чтобы получить дополнительный столбец флага, мы можем использовать:

df %>% 
  group_by(id) %>% 
  mutate(is_duplicate = row_number() %in% find_duplicates(Result))
0 голосов
/ 28 апреля 2020

Мы можем сгруппировать по 'id' и создать флаг, проверив lag или lead смежного 'Result'

library(dplyr)
df1 %>%
   group_by(id) %>%
   mutate(flag= Result == lag(Result)|Result == lead(Result)) %>%
   filter(flag)
# A tibble: 4 x 6
# Groups:   id [1]
#      id DateCollected       Test               Result Units flag 
#    <dbl> <dttm>              <chr>               <dbl> <chr> <lgl>
#1 1010001 2006-04-30 00:00:00 Tacrolimus (FK506)    8.4 ug/L  TRUE 
#2 1010001 2006-05-01 00:00:00 Tacrolimus (FK506)    8.4 ug/L  TRUE 
#3 1010001 2006-05-04 00:00:00 Tacrolimus (FK506)    5.4 ug/L  TRUE 
#4 1010001 2006-05-05 00:00:00 Tacrolimus (FK506)    5.4 ug/L  TRUE 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...