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

如何使用R移除列中每行字符串的重复字符?

嘿,这个需求处理起来其实很简单,我给你两种常用的解决方案,你可以根据自己的习惯来选:

方法一:用Base R原生实现(无需额外安装包)

先把你的示例数据构造出来:

df <- data.frame(name = c(A="a,a,b,c,d,d,d", B="a,b,b,b,f", C="d,d,d,d", D="a,a"), 
                 row.names = c("A", "B", "C", "D"))

接下来一行代码就能完成去重操作:

df$name <- sapply(strsplit(df$name, ","), function(x) paste(unique(x), collapse = ","))

简单解释下步骤:

  • strsplit(df$name, ","):把每个字符串按逗号拆分成独立的字符向量
  • unique(x):对拆分后的向量去除重复元素
  • paste(..., collapse = ","):把去重后的元素再用逗号连接成字符串
  • sapply():把上面的操作批量应用到name列的每一行
方法二:用tidyverse工具链(更符合现代R风格)

如果你平时习惯用tidyverse系列包(比如dplyr、stringr),可以用这个更直观的写法:
先加载必要的包:

library(tidyverse)

然后用管道流处理数据:

df <- df %>%
  mutate(name = str_split(name, ",") %>% 
           map(unique) %>% 
           map_chr(paste, collapse = ","))

这个逻辑和Base R的方法本质一样,只是用了tidyverse的语法:

  • str_split():和strsplit功能一致,拆分字符串
  • map(unique):对每个拆分后的向量执行去重
  • map_chr():把处理后的列表转回字符向量,方便赋值回数据框

不管用哪种方法,最终你都会得到想要的结果:

print(df)
#          name
# A a,b,c,d
# B   a,b,f
# C       d
# D       a

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:00:47