Dplyr使用指南:R data.frame中双姓姓名数据的识别与标准化清洗
R使用dplyr实现双姓姓名筛选与清洗
依赖包准备
需要用到dplyr做数据处理,stringr做字符串匹配,未安装可先执行安装:
install.packages(c("dplyr", "stringr"))
完整实现代码
# 加载包 library(dplyr) library(stringr) # 原始数据 df <- data.frame(names = c("Adu-Amankwah E", "Smith Dawson E", "Lopez-Garcia M", "Lopez Garcia MA", "Garcia MAC", "Lopez Garcia MA", "Garcia MAC")) # 清洗核心逻辑 df_clean <- df %>% # 筛选符合要求的双姓记录:含连字符/双空格(双姓+首字母格式)/需要替换的Garcia MAC记录 filter(str_detect(names, "-|\\s.*\\s|Garcia MAC")) %>% # 按规则替换姓名内容 mutate(names = case_when( # 精确匹配需要统一替换的姓名,避免误匹配 names %in% c("Lopez Garcia MA", "Lopez-Garcia MA", "Garcia MAC") ~ "Lopez-Garcia M", names == "Smith Dawson E" ~ "Smith-Dawson E", # 其余符合条件的记录保留原值 .default = names ))
输出验证
运行print(df_clean)即可得到目标结果:
names 1 Adu-Amankwah E 2 Smith-Dawson E 3 Lopez-Garcia M 4 Lopez-Garcia M 5 Lopez-Garcia M 6 Lopez-Garcia M 7 Lopez-Garcia M
注意事项
- 若不需要过滤原始数据、仅对全量数据做替换,直接删除
filter那一行即可 - 代码使用精确匹配做规则判断,比正则模糊匹配更稳妥,若实际场景需要模糊匹配,可将判断条件替换为
str_detect正则表达式
内容的提问来源于stack exchange,提问作者HCAI
相关产品推荐
相关产品推荐

