Как получить общее количество дубликатов? - PullRequest
0 голосов
/ 12 июня 2018

У меня есть ниже упомянутый фрейм данных:

DF <- read.table(text = "
Date         ID
2018-04-01   K-1
2018-04-01   K-1
2018-04-01   K-8
2018-04-02   K-2
2018-04-02   K-2
2018-04-03   K-2
2018-04-03   K-2
2018-04-03   K-2
2018-04-04   K-3
2018-05-01   K-5
2018-05-01   K-5
2018-05-02   K-6
2018-05-02   K-7", header = TRUE, stringsAsFactors = FALSE)

Используя вышеупомянутый фрейм данных, я хочу определить нижеупомянутый показатель:

Date       Unique_count      Duplicate_Count      Overall_Duplicate
2018-04-01 2                 1                    0
2018-04-02 1                 1                    0
2018-04-03 0                 0                    3
2018-04-04 1                 0                    0
2018-05-01 1                 1                    0
2018-05-02 2                 0                    0

Где:

  • Unique_count - Отличительный ID, созданный для определенной даты, ID не должен совпадать с любым предыдущим ID.

  • Duplicate_count - число дополнительных (если 2 K-1, чем - Duplicate_count должно быть 1) одинаковое ID, сгенерированное для конкретной даты, такое же ID не должен совпадать с любым предыдущим ID.

  • Overall_Duplicate - счетчик ID, который был сгенерирован ранее и снова присутствует на определенную дату.

У меня есть указанный ниже код, не уверен насчет Overall_Duplicate:

library(dplyr)

DF2 <- DF %>%
  group_by(Date) %>%
  summarise(Unique_Count  = n_distinct(ID),
            Duplicate_Count = sum(table(ID)>1))

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Если вы сначала группируете по идентификатору и обнаруживаете, когда каждый идентификатор появляется в первый раз, вы можете изменить все последующие идентификаторы (после первого появления) на NA, а затем выполнить некоторые вычисления, чтобы получить то, что вы хотите.

DF %>%
  group_by(ID) %>%
  mutate(first_time = min(Date)) %>% 
  ungroup() %>% 
  mutate(ID = ifelse(Date == first_time, ID, NA)) %>% 
  group_by(Date) %>% 
  summarise(Unique_Count = n_distinct(ID, na.rm = TRUE),
            Overall_Duplicate = sum(is.na(ID)),
            Duplicate_Count = n() - Unique_Count - Overall_Duplicate)
0 голосов
/ 12 июня 2018

Вы можете попробовать что-то подобное.Но это жестко закодировано в соответствии с вашими воспроизводимыми данными.В реальной жизни могут быть ложные срабатывания.

library(tidyverse)
DF %>%
  mutate(id=duplicated(ID)) %>% 
  group_by(ID) %>% 
  mutate(OLdate=n_distinct(Date)>1) %>% 
  group_by(Date) %>% 
  summarise(Unique_count=sum(!na_if(id, T), na.rm = T),
            Duplicate_Count=ifelse(Unique_count == 0, 0, sum(id)),
            Overall_Duplicate=ifelse(Unique_count == 0,sum(OLdate), 0)) 
# A tibble: 6 x 4
  Date       Unique_count Duplicate_Count Overall_Duplicate
  <chr>             <int>           <dbl>             <dbl>
1 2018-04-01            2               1                 0
2 2018-04-02            1               1                 0
3 2018-04-03            0               0                 3
4 2018-04-04            1               0                 0
5 2018-05-01            1               1                 0
6 2018-05-02            2               0                 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...