2017-02-10 2 views
-1

Я пытаюсь автоматизировать процесс очистки данных. Мой набор данных выглядит так:Дублировать обнаружение + создать новый столбец с dplyr в R

ADDRESS PHONE TYPE 123 Willow Street 7429947 RESIDENTIAL 123 Willow Street 7426629 RESIDENTIAL 234 Butter Road 7564123 RESIDENTIAL Это довольно большой - несколько сотен тысяч строк. Я хотел бы иметь возможность сделать следующее:

(1) Двойное обнаружение, поэтому я могу исключить «почти» -дублирующие строки.
(2) Создайте новый столбец для не дублированных данных - что-то вроде PHONE 2. Проблема в том, что я не могу заранее знать, есть ли только две повторяющиеся строки - может быть n.

Исход, мы надеемся, что-то вроде этого:

ADDRESS PHONE PHONE 2 TYPE 123 Willow Street 7429947 7426629 RESIDENTIAL 234 Butter Road 7564123 RESIDENTIAL

Я хотел бы сделать это с dplyr, но я вроде в недоумении, с чего начать. Любые указатели?

+0

Каков ожидаемый выход в вышеупомянутом случае? Какую строку вы держите? Что делает что-то предполагаемым дубликатом? – Gopala

+0

@Gopala - Спасибо - я отредактировал, чтобы включить ожидаемый результат. –

+0

Является ли телефон единственным столбцом? Что, если адрес немного отличается? Ваш вопрос/требование все еще не ясны. – Gopala

ответ

1

Используя комбинацию dplyr и tidyr, вы можете сделать что-то вроде этого:

library(dplyr) 
library(tidyr) 
df <- data.frame(ADDRESS = c('123 Willow Street', '123 Willow Street', 
          '234 Butter Road'), 
       PHONE = c('7429947', '7426629', '7564123'), 
       TYPE = 'RESIDENTIAL', stringsAsFactors = FALSE) 
df %>% 
    group_by(ADDRESS, TYPE) %>% 
    mutate(PHONEID = paste0('PHONE', row_number())) %>% 
    spread(PHONEID, PHONE) 

Вывод будет выглядеть следующим образом:

Source: local data frame [2 x 4] 
Groups: ADDRESS, TYPE [2] 

      ADDRESS  TYPE PHONE1 PHONE2 
*    <chr>  <chr> <chr> <chr> 
1 123 Willow Street RESIDENTIAL 7429947 7426629 
2 234 Butter Road RESIDENTIAL 7564123 <NA> 
+0

Спасибо! Это отличное начало. Очень признателен. –

Смежные вопросы