如何用R函数检测特定字符串并替换为指定选区的对应数值?
处理德国大选选区数据的引用值替换需求
我正在处理1994年德国大选的选区数据,其中nonemployementrate字段的部分观测值是"siehe Wkr xxx"格式的字符串(意为“见选区xxx”),需要将这类值替换为constituency_no为xxx的行对应的失业率数值。比如汉堡-阿尔托纳选区的失业率需复用汉堡-米特区的数值。
示例数据
example_data <- data.frame(constituency_no = c("001", "002", "003", "004", "005"), constituency_name = c("Hamburg-Mitte", "Hamburg-Altona", "Hamburg-Nord", "Lübeck", "Pinneberg"), nonemployementrate = c(0.04, "siehe Wkr 001", "siehe Wkr 001", 0.03, 0.02))
需求目标
需要一个R函数,自动检测以"siehe Wkr "开头的字符串,将其替换为对应选区的失业率数值,最终得到如下结果:
result <- data.frame(constituency_no = c("001", "002", "003", "004", "005"), constituency_name = c("Hamburg-Mitte", "Hamburg-Altona", "Hamburg-Nord", "Lübeck", "Pinneberg"), nonemployementrate = c(0.04, 0.04, 0.04, 0.03, 0.02))
解决方案
可以编写如下R函数实现需求:
replace_siehe_wkr <- function(df) { # 构建已知失业率的选区编号与数值映射表 rate_mapping <- setNames( df$nonemployementrate[!grepl("siehe Wkr ", df$nonemployementrate)], df$constituency_no[!grepl("siehe Wkr ", df$nonemployementrate)] ) # 遍历替换引用值 df$nonemployementrate <- sapply(df$nonemployementrate, function(val) { if (grepl("^siehe Wkr ", val)) { target_wkr <- sub("^siehe Wkr ", "", val) rate_mapping[target_wkr] } else { val } }) # 将字段转换为数值类型 df$nonemployementrate <- as.numeric(df$nonemployementrate) return(df) } # 运行函数得到结果 result <- replace_siehe_wkr(example_data) print(result)
函数说明
- 首先构建映射表:筛选出所有非引用格式的失业率记录,以选区编号为键、失业率为值建立映射。
- 遍历处理每个失业率值:判断是否为引用格式,若是则提取目标选区编号,从映射表中取出对应数值;若不是则保留原值。
- 最后将
nonemployementrate字段统一转换为数值类型,确保数据格式一致。
内容的提问来源于stack exchange,提问作者Paul-Markus Rudolf
相关产品推荐
相关产品推荐

