【发布时间】:2020-09-01 14:52:54
【问题描述】:
我有一个超过 20k obs 的数据框。其中一列是“城市名称”(df$city)。有超过 600 个独特的城市名称。其中一些拼写错误。
我的数据框示例:
> df$city
[1] "BOSTN" "LOS ANGELOS" "NYC" "CHICAGOO"
[2] "SEATTLE" "BOSTON" "NEW YORK CITY"
我创建了一个 csv 文件,其中列出了所有拼写错误的城市名称以及正确的名称。
> head(city)
city city_incorrect
1 BOSTON BOSTN
2 LOS ANGELES LOS ANGELOS
3 NEW YORK CITY NYC
4 CHICAGO CHICAGOO
理想情况下,我会编写代码,根据“city.csv”文件替换 df$city 中的值。
注意:我最初发布了这个问题,有人建议我使用合并,我认为这不是解决我的问题的最有效方法,因为我还必须在我的 " city.csv”文件。或者我认为我需要一个额外的步骤来组合合并数据框中的两列。所以我认为根据“city.csv”替换df$city中的值可能更容易。
编辑: 这是对我的数据框的更详细了解
> df[1:5]
id owner city state
1 AAAAA BOSTN MA
2 BBBBB LOS ANGELOS CA
3 CCCCC NYC NY
4 DDDDD CHICAGOO IL
5 EEEEE BOSTON MA
6 FFFFF SEATTLE WA
7 GGGGG NEW YORK CITY NY
8 HHHHH LOS ANGELES CA
如果我使用合并或 cbind,它不会像这样在我的数据框末尾创建另一列:
> merge()
id owner city state city_correct
1 AAAAA BOSTN MA BOSTON
2 BBBBB LOS ANGELOS CA LOS ANGELES
3 CCCCC NYC NY NEW YORK CITY
4 DDDDD CHICAGOO IL CHICAGO
5 EEEEE BOSTON MA
6 FFFFF SEATTLE WA
7 GGGGG NEW YORK CITY NY
8 HHHHH LOS ANGELES CA
因此,拼写错误的城市将被纠正,但拼写正确的城市将被排除在外。我最终想要的是一列包含所有更正的城市名称。
【问题讨论】:
-
城市是否逐行匹配,或者您想要部分字符串匹配?如果是逐行,“简单”的 cbind 可以吗?
-
@NelsonGon 嗨!我认为合并选项不是我想要的?我编辑了我的原始帖子,希望有助于澄清我的问题。
-
不,您不必在 csv 中包含正确拼写的城市即可使用
merge。执行left_join,right_join(取决于您如何安排数据集),然后执行coalesce。只是不要进行内部连接。召回加入类似于合并
标签: r replace multiple-columns