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

求助:基于R语言标准化CSV文件中的地址数据

解决CSV地址标准化与去重问题

嘿,我来帮你搞定这个地址标准化的问题!你提到之前用gsub没成功,咱们一步步拆解任务,把所有需求都实现到位~

首先明确咱们要完成的任务清单:

  • 移除地址中的所有句号(.)
  • 清除多余空格(包括首尾空格和中间连续的多个空格)
  • 将地址缩写统一替换:St → street、Rd → Road
  • 处理数据中的重复项(可选但你提到了这个问题)

步骤1:读取CSV文件

先把你的CSV文件读进R里,这里推荐用tidyverse的read_csv(处理字符串更灵活),当然基础R的read.csv也可以:

# 加载tidyverse包(如果没安装先跑install.packages("tidyverse"))
library(tidyverse)
df <- read_csv("你的CSV文件名.csv")

# 基础R替代写法
# df <- read.csv("你的CSV文件名.csv", stringsAsFactors = FALSE)

步骤2:编写地址标准化函数

咱们写一个自定义函数,把所有处理逻辑整合进去,这样可以批量处理Address1和Address2列:

standardize_address <- function(address) {
  # 1. 移除所有句号
  address <- gsub("\\.", "", address)
  # 2. 替换地址缩写:用\\b确保只替换独立的单词,避免误替换(比如不替换"East"里的"st")
  # ignore.case = TRUE 匹配大小写不同的情况(比如ST、rd)
  address <- gsub("\\bSt\\b", "street", address, ignore.case = TRUE)
  address <- gsub("\\bRd\\b", "Road", address, ignore.case = TRUE)
  # 3. 清除多余空格:先去首尾空格,再把中间连续空格换成单个空格
  address <- trimws(address)
  address <- gsub("\\s+", " ", address)
  return(address)
}

步骤3:应用函数到地址列

把标准化函数应用到需要处理的地址列:

# tidyverse管道写法,更清晰
df <- df %>%
  mutate(
    Address1 = standardize_address(Address1),
    Address2 = standardize_address(Address2)
  )

# 基础R替代写法
# df$Address1 <- standardize_address(df$Address1)
# df$Address2 <- standardize_address(df$Address2)

步骤4:处理重复数据

你提到数据有重复,处理完地址后可以用distinct()去重:

# 按所有列去重,保留唯一行
df <- df %>% distinct()

# 或者按EmailAddress去重(保留每个邮箱的第一条记录)
df <- df %>% distinct(EmailAddress, .keep_all = TRUE)

最终示例结果

用你提供的测试数据,处理后会得到这样的标准化结果:

EmailAddressAddress1Address2CityState
xyz@gmail.com510 E Fellows street unit 2FallonFallonNV
abc@yahoo.com4432 Lockhill Selma RoadSarostaSarostaFL

如果你之前用gsub没成功,大概率是没考虑单词边界(比如直接替换St会误改其他单词)或者空格清理的顺序,这个函数应该能解决你的问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:37:51