我正在尝试自动执行数据清理过程。我的数据集如下所示:
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 :(得分: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>