在R语言中利用字典数据框替换目标数据框指定列的德语城市名
用字典数据框替换数据框中的德语城市名
首先先修正你提供的示例代码里的错误(变量名错误、字符串未加引号、字典列顺序不符),确保代码能正常运行:
# 修正后的目标数据框 ticket_id <- c(1,3,4,5) depart_city <- c("Lemberg", "Köln", "Düsseldorf", "Lemberg") # 字符串需加引号 price <- c(20,25,22,21) tickets <- data.frame(ticket_id, depart_city, price) # 修正变量名错误 # 修正后的字典数据框(第一列为德语,第二列为英语) de <- c("Lemberg", "Düsseldorf", "Köln") eng <- c("Lviv", "Duesseldorf", "Cologne") dict <- data.frame(de, eng) # 调整列顺序符合需求
接下来提供两种实用的替换方法:
方法一:Base R 原生实现(无需额外包)
利用match()函数匹配德语城市名的位置,提取对应的英语名称替换目标列:
# 匹配目标列每个值在字典德语列中的位置 match_pos <- match(tickets$depart_city, dict$de) # 替换示例中的depart_city列(对应你的第17列) tickets$depart_city <- dict$eng[match_pos]
如果目标数据框第17列没有命名,可直接用列索引操作:
# 替换第17列 tickets[, 17] <- dict$eng[match(tickets[, 17], dict$de)]
方法二:用dplyr包(更直观的数据分析工作流)
如果你习惯tidyverse工具链,用left_join()连接数据框后替换更清晰:
先安装并加载dplyr包:
install.packages("dplyr") library(dplyr)
执行替换操作:
tickets <- tickets %>% left_join(dict, by = c("depart_city" = "de")) %>% # 按德语城市名关联 mutate(depart_city = eng) %>% # 用英语名称覆盖原德语列 select(-eng) # 删除临时生成的eng列
若用列索引操作第17列(假设列名为X17):
tickets <- tickets %>% left_join(dict, by = c(X17 = "de")) %>% mutate(X17 = eng) %>% select(-eng)
注意事项
- 若目标数据框存在字典中没有的德语城市名,替换后会显示
NA,可使用replace()函数按需处理缺失值。 - 确保两数据框中德语城市名的字符编码一致,避免因编码差异导致匹配失败。
内容的提问来源于stack exchange,提问作者Nazar Duma
相关产品推荐
相关产品推荐

