如何在单个单元格批量替换多值:R数据框职能名转编码
问题:替换数据框单元格内多职能名称为对应编码
现有数据
我们有两个R数据框:
Result 数据框
Number Omschrijving functie 102040 Kadaster Grondwerker Landmeter 104510 Graven sleuf Stratenmaker Grondwerker Landmeter
Functiecode 映射表
functie code Stratenmaker F1 Grondwerker F3 Landmeter F17
数据加载代码:
Result <- read.table(text = " Number,Omschrijving,functie 102040,Kadaster,Grondwerker Landmeter 104510,Graven sleuf,Stratenmaker Grondwerker Landmeter ", header = TRUE, sep = ",") Functiecode <- read.table(text = " functie code Stratenmaker F1 Grondwerker F3 Landmeter F17 ", header = TRUE)
期望输出
将Result中functie列的多职能名称替换为对应编码,最终得到:
Number Omschrijving functie 102040 Kadaster F3 F17 104510 Graven sleuf F1 F3 F17
解决方案
方法1:使用tidyverse工具链
适合处理复杂数据场景,步骤清晰:
library(tidyverse) df <- Result %>% # 按空格拆分functie列为多行 separate_rows(functie, sep = " ") %>% # 关联编码映射表 left_join(Functiecode, by = "functie") %>% # 按原编号和描述分组,合并编码为空格分隔的字符串 group_by(Number, Omschrijving) %>% summarise(functie = str_c(code, collapse = " "), .groups = "drop") print(df)
方法2:使用基础R实现
轻量无需额外包,适合简单场景:
# 将映射表转换为命名向量,方便快速匹配 code_map <- setNames(Functiecode$code, Functiecode$functie) # 遍历每个functie单元格,拆分后匹配编码再合并 Result$functie <- sapply(strsplit(Result$functie, " "), function(x) { paste(code_map[x], collapse = " ") }) print(Result)
两种方法都能得到符合预期的输出,可根据实际需求选择。
内容的提问来源于stack exchange,提问作者Timo V
相关产品推荐
相关产品推荐

