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

如何在R语言中修正dataframe内的州名拼写错误与缩写?

解决R语言DataFrame中州名统一的问题

你手头的R语言DataFrame包含印度各州名称,但存在拼写错误、缩写等变体(比如拉贾斯坦邦有RAJSHTHAN、RJ、RAJSTHAN等写法),需要将所有变体统一为标准名称。以下是针对问题的分析和正确实现方案:

之前尝试方法的问题分析

  • 方法1、2:错误使用dplyr的replace函数,该函数需配合mutate使用,且参数格式不符合要求,导致unused argument报错。
  • 方法3:用== x无法匹配多个值(需用%in%),且赋值逻辑错误,因此无效果。
  • 方法4:循环中修改的是临时变量ST,而非原DataFrame的列;同时条件判断误用赋值符号=,多值判断逻辑错误,导致无效果。

正确实现方案

方案1:基础R(高效简洁,适合单类变体)

直接用%in%匹配所有变体,批量赋值标准名称:

# 定义拉贾斯坦邦的所有变体
rajasthan_variants <- c("RAJSHTHAN", "RJ", "RAJSTHAN")
# 替换为标准名称
state$ST[state$ST %in% rajasthan_variants] <- "RAJASTHAN"

方案2:dplyr(tidyverse风格,适合管道操作)

用mutate配合replace或case_match实现:

library(dplyr)

# 方法A:使用replace
state <- state %>%
  mutate(ST = replace(ST, ST %in% c("RAJSHTHAN", "RJ", "RAJSTHAN"), "RAJASTHAN"))

# 方法B:使用case_match(更直观,适合多组替换)
state <- state %>%
  mutate(ST = case_match(ST,
                         c("RAJSHTHAN", "RJ", "RAJSTHAN") ~ "RAJASTHAN",
                         .default = ST))

方案3:映射表批量替换(适合大型数据集/多州变体)

如果需要处理大量州的变体(比如ORISSA→ODISHA、PONDICHERRY→PUDUCHERRY、缩写APO→ANDHRA PRADESH等),建议维护一个映射表,通过left_join批量替换:

library(dplyr)

# 构建变体-标准名映射表
state_mapping <- tibble(
  original = c("RAJSHTHAN", "RJ", "RAJSTHAN",
               "ORISSA", "PONDICHERRY", "NEW DELHI",
               "APO", "AR", "NL", "PB"),
  standard = c(rep("RAJASTHAN", 3),
               "ODISHA", "PUDUCHERRY", "DELHI",
               "ANDHRA PRADESH", "ARUNACHAL PRADESH", "NAGALAND", "PUNJAB")
)

# 批量替换
state <- state %>%
  left_join(state_mapping, by = c("ST" = "original")) %>%
  mutate(ST = ifelse(is.na(standard), ST, standard)) %>%
  select(-standard)

这种方式只需维护映射表即可,扩展性强,非常适合大型数据集的标准化处理。

内容的提问来源于stack exchange,提问作者Joe Mcsweeney

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:10:33