Дедупликация по двум столбцам - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь выяснить, сколько уникальных товаров доступно в магазине.Проблема в том, что данные очень грязные.К счастью, мои оценки могут быть приблизительными.Когда-то в прошлом названия продуктов заменялись кодами продуктов.Некоторые продукты имеют название, некоторые продукты имеют код, а некоторые продукты имеют оба.Мне нужно дедупликации по обоим столбцам.Некоторые названия продуктов и коды продуктов не совпадают.

Например, рассмотрим следующий пример ...

data.frame(product_name = c("A", "B", "B", NA), product_code = c(NA, 1, 2, 1))
# product_name product_code
#            A           NA
#            B            1
#            B            2
#         <NA>            1

Следует учитывать два уникальных продукта.Первый ряд уникален.Вторая и третья разделяют имя продукта, в то время как вторая и четвертая строки разделяют код.

Вот пример с большим количеством данных.Большое количество значений NA похоже на мой настоящий набор данных.

df <- data.frame(product_name = c(rep(LETTERS, 2), rep(NA, 48)),
           product_code = c(rep(NA, 10), sample(1:80, 90, replace = TRUE)))

Есть предложения?

1 Ответ

0 голосов
/ 25 мая 2018

С dplyr вы можете использовать distinct():

library(dplyr)

df %>% 
  distinct(product_name, .keep_all=TRUE) %>%
  distinct(product_code, .keep_all=TRUE)

Выход:

  product_name product_code
1            A           NA
2            B            1

Добавить count(), чтобы получить счет:

df %>% 
  distinct(product_name, .keep_all=TRUE) %>%
  distinct(product_code, .keep_all=TRUE) %>%
  count() # 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...