在R语言中去除重复姓氏并将下划线替换为空格
R语言批量清洗姓氏与名字字符串方案
需求对应处理逻辑
- 姓氏列:拆分下划线分隔的重复元素→去重→用空格连接复合姓氏
- 名字列:移除开头下划线→将中间下划线替换为空格
完整实现代码
# 加载字符串处理依赖包 library(tidyverse) # 模拟数千行结构的示例数据 raw_data <- tibble( full_name = c( "王_王_李,_小_明", "张_张,_丽_娜", "刘_陈_刘,_大_强", "欧阳_欧阳,_雪_梅", "赵_钱_赵,_伟_华" ) ) # 姓氏清洗函数:拆分去重后空格连接 clean_surname <- function(surname_str) { surname_str %>% str_split("_") %>% map(unique) %>% str_flatten(" ") } # 名字清洗函数:删开头下划线+替换中间下划线为空格 clean_given_name <- function(given_name_str) { given_name_str %>% str_remove("^_") %>% str_replace_all("_", " ") } # 批量处理流程 cleaned_data <- raw_data %>% # 按逗号拆分原始姓名为姓氏、名字原始列 separate(full_name, into = c("surname_raw", "given_name_raw"), sep = ",", trim = TRUE) %>% # 清洗姓氏 mutate(surname_clean = clean_surname(surname_raw)) %>% # 清洗名字 mutate(given_name_clean = clean_given_name(given_name_raw)) %>% # 保留最终清洗后的列(可选) select(surname_clean, given_name_clean) # 输出结果 print(cleaned_data)
关键说明
- 数据读取:若数据存储在CSV文件中,替换示例数据部分为:
raw_data <- read_csv("your_data_file.csv", col_names = "full_name") - 效率适配:所有操作均为向量化处理,无需循环,处理数千行数据完全无压力
- 边界场景兼容:自动处理复合姓氏(如
欧阳_欧阳清洗为欧阳)、多重复元素姓氏(如王_王_李清洗为王 李)
内容的提问来源于stack exchange,提问作者denis
相关产品推荐
相关产品推荐

