如何在R语言数据框的字符串列中批量去除每行重复名称?
解决R语言data.frame列内逗号分隔字符串去重问题
针对你的需求,这里提供几种简洁高效的方法,将单行处理逻辑推广到整个my.text列:
方法1:基础R(无需额外包)
用sapply循环处理每个字符串元素,完成拆分、去重、合并的流程:
df$my.text <- sapply(df$my.text, function(x) { # 拆分字符串为向量,去重后重新合并 paste(unique(strsplit(x, split = ", ")[[1]]), collapse = ", ") })
方法2:tidyverse风格(purrr包)
如果习惯tidyverse的语法,用purrr::map_chr可以更简洁地实现:
library(purrr) df$my.text <- map_chr(df$my.text, ~ paste(unique(strsplit(.x, ", ")[[1]]), collapse = ", "))
方法3:dplyr管道式处理
结合dplyr的管道操作,代码可读性更强:
library(dplyr) library(purrr) df <- df %>% mutate(my.text = map_chr(my.text, ~ paste(unique(strsplit(.x, ", ")[[1]]), collapse = ", ")))
验证结果
运行上述任意一种方法后,df的输出将符合预期:
df #> my.text #> 1 John Smith, Johnny Smith #> 2 John Doe, Doe, Johnny #> 3 Jane Doe
另外,你提到的mapply其实也能实现,只是需要调整参数写法:
df$my.text <- mapply(function(x) paste(unique(strsplit(x, ", ")[[1]]), collapse = ", "), df$my.text)
sapply本质是mapply的简化版,单输入场景下用sapply更直观。
内容的提问来源于stack exchange,提问作者user17661126
相关产品推荐
相关产品推荐

