You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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)

函数说明

  1. 首先构建映射表:筛选出所有非引用格式的失业率记录,以选区编号为键、失业率为值建立映射。
  2. 遍历处理每个失业率值:判断是否为引用格式,若是则提取目标选区编号,从映射表中取出对应数值;若不是则保留原值。
  3. 最后将nonemployementrate字段统一转换为数值类型,确保数据格式一致。

内容的提问来源于stack exchange,提问作者Paul-Markus Rudolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 17:15:09