【发布时间】:2024-11-18 07:15:01
【问题描述】:
我有一些非常脏的数据,我真的很难清理。该问题的一个示例如下:
ID NAME ADDRESS EMAIL PHN
1 Alice 123 Street alice@gmail.com 5555555
1 Alice 123 Street <NA> 4444444
2 Bob 9 Circle Bob@gmail.com 1111111
3 Charlie 4 Ave Charlie@gmail.com 3333333
3 Charlie 4 Ave Charlie@hotmail.com 3333333
3 Charlie 4 Ave <NA> NA
4 Doug 1 Court <NA> 6666666
想要的输出是这样的:
ID NAME ADDRESS EMAIL_1 EMAIL_2 PHN_1 PHN_2
1 Alice 123 Street alice@gmail.com <NA> 5555555 4444444
2 Bob 9 Circle bob@gmail.com <NA> 1111111 NA
3 Charlie 4 Ave charlie@gmail.com charlie@hotmail.com 3333333 NA
4 Doug 1 Court <NA> <NA> 6666666 NA
了解EMAIL 和PHN 变量可以任意扩展(即,可能有n 个具有不同(或NA)值的ID 重复.)
到目前为止我的解决方案:
df.test <- df %>%
group_by(ID) %>%
mutate(EMAILID = paste0("EMAIL_",row_number())) %>%
spread(EMAILID,EMAIL) %>%
mutate(PHONEID = paste0('PHN_',row_number())) %>%
spread(PHONEID,PHN)
但这会产生更畸形的data.frame:
ID NAME ADDRESS EMAIL_1 EMAIL_2 EMAIL_3 PHN_1 PHN_2 PHN_3
1 Alice 123 Street alice@gmail.com <NA> <NA> 5555555 NA NA
1 Alice 123 Street <NA> <NA> <NA> NA 4444444 NA
2 Bob 9 Circle Bob@gmail.com <NA> <NA> 1111111 NA NA
3 Charlie 4 Ave Charlie@gmail.com <NA> <NA> 3333333 NA NA
3 Charlie 4 Ave <NA> Charlie@hotmail.com <NA> NA 3333333 NA
3 Charlie 4 Ave <NA> <NA> <NA> NA NA NA
4 Doug 1 Court <NA> <NA> <NA> 6666666 NA NA
有什么帮助吗?我怀疑我的问题与spread() 命令有关,但到目前为止我的尝试都证明是徒劳的。谢谢。
【问题讨论】:
-
如果你去掉变异会发生什么?
-
@RyanMorton:如果我将代码替换为:
df.test <- df %>% group_by(ID) %>% spread(ID,EMAIL) %>% spread(ID,PHN)我得到错误:行标识符重复 (4,5) -
嗯,你能把 NAME 添加到 group_by 吗?
-
不幸的是,导致同样的错误。如果我尝试使用 ADDRESS,也是一样。
-
在原始文件末尾添加一个
summarise_each(funs(first)怎么样?