根据R中的另一数据帧替换一列中的值 [英] Replace values in one column based on another dataframe in R
本文介绍了根据R中的另一数据帧替换一列中的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个超过20000个OB的数据帧。其中一列是"城市名称"(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
理想情况下,我会编写代码,根据"ciy.csv"文件替换df$City中的值。
注意:我最初发布了这个问题,有人建议我使用合并,我不认为这是解决我问题的最有效的方法,因为我还必须在我的"ciy.csv"文件中包括600个拼写正确的城市。或者,我认为我需要一个额外的步骤来组合合并数据帧中的两列。因此,我认为只替换基于"ciy.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
如果我使用MERGE或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
因此,拼写错误的城市将被更正,但拼写正确的城市将被省略。我最后想要的是一个包含所有更正的城市名称的栏。
推荐答案
在我看来,您尝试做的是匹配一个数据帧中的错误城市名称,并将其替换为另一个数据帧中的正确城市名称。如果这是正确的,则此dplyr
解决方案应该有效。
数据:
包含正确和错误城市名称对的数据帧:
city <- data.frame(
city_correct = c("BOSTON", "LOS ANGELES", "NEW YORK CITY", "CHICAGO"),
city_incorrect = c("BOSTN", "LOS ANGELOS", "NYC", "CHICAGOO"), stringsAsFactors = F)
混合使用正确和错误城市名称的数据帧:
set.seed(123)
df <- data.frame(town = sample(c("BOSTON", "LOS ANGELES", "NEW YORK CITY", "CHICAGO","BOSTN",
"LOS ANGELOS", "NYC", "CHICAGOO"), 20, replace = T), stringsAsFactors = F)
解决方案:
library(dplyr)
df <- left_join(df, city, by = c("town" = "city_incorrect"))
df$town_correct<-ifelse(is.na(df$city_correct), df$town, df$city_correct)
df$city_correct <- NULL
编辑:
另一个base R
解决方案是:
df$town_correct <- ifelse(df$town %in% city$city_incorrect,
city$city_correct[match(df$town, city$city_incorrect)],
df$town[match(df$town, city$city_correct)])
结果:
df
town town_correct
1 NEW YORK CITY NEW YORK CITY
2 NYC NEW YORK CITY
3 CHICAGO CHICAGO
4 CHICAGOO CHICAGO
5 CHICAGOO CHICAGO
6 BOSTON BOSTON
7 BOSTN BOSTON
8 CHICAGOO CHICAGO
9 BOSTN BOSTON
10 CHICAGO CHICAGO
11 CHICAGOO CHICAGO
12 CHICAGO CHICAGO
13 LOS ANGELOS LOS ANGELES
14 BOSTN BOSTON
15 BOSTON BOSTON
16 CHICAGOO CHICAGO
17 LOS ANGELES LOS ANGELES
18 BOSTON BOSTON
19 NEW YORK CITY NEW YORK CITY
20 CHICAGOO CHICAGO
这篇关于根据R中的另一数据帧替换一列中的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文