2017-02-10 56 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.问题是我无法事先知道是否只有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

使用的dplyrtidyr组合,你可以做这样的事情:

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

谢谢!这是一个很好的开始。非常感激。 –