R 如何在向量中的每个字符串中只保留唯一的单词

R 如何在向量中的每个字符串中只保留唯一的单词,r,string,vector,duplicates,R,String,Vector,Duplicates,我有如下数据: vector = c("hello I like to code hello","Coding is fun", "fun fun fun") 我想删除重复的单词(以空格分隔),即输出应该如下所示 向量机 [1] "hello I like to code" [2] "coding is fun" [3] "fun" 将其拆分(strsplit在空格上),使用unique(在lapply中),然后将其粘贴到一起: vapply(lapply(strsplit(vector,

我有如下数据:

vector = c("hello I like to code hello","Coding is fun", "fun fun fun")
我想删除重复的单词(以空格分隔),即输出应该如下所示

向量机

[1] "hello I like to code"
[2] "coding is fun"
[3] "fun"
将其拆分(
strsplit
在空格上),使用
unique
(在
lapply
中),然后将其粘贴到一起:

vapply(lapply(strsplit(vector, " "), unique), paste, character(1L), collapse = " ")
# [1] "hello i like to code" "coding is fun"        "fun"  

## OR
vapply(strsplit(vector, " "), function(x) paste(unique(x), collapse = " "), character(1L))

根据评论更新 您始终可以编写一个自定义函数来与
vapply
函数一起使用。例如,这里有一个函数,它接受拆分字符串,删除短于一定数量字符的字符串,并将“唯一”设置作为用户选择

myFun <- function(x, minLen = 3, onlyUnique = TRUE) {
  a <- if (isTRUE(onlyUnique)) unique(x) else x
  paste(a[nchar(a) > minLen], collapse = " ")
}

我花了一段时间寻找数据帧,tidyverse友好的版本,所以我想我应该粘贴我的详细解决方案:

库(tidyverse)
df%
变异(split=str#u split(vector,“”)%>%#split
mutate(split=map(.$split,~unique(.x))%>%#删除重复项
变异(split=map_chr(.$split,~paste(.x,collapse=”“)#重新组合
结果:

向量拆分 #>你好,我喜欢编码你好,你好,我喜欢编码 #>2编码很有趣编码很有趣 #>3乐趣
由(v0.3.0)于2021-01-03创建的

我可以应用相同的技术删除拆分字符串中少于3个字符的任何单词吗?@shecode,方法类似,但您必须根据
nchar
的结果再添加一个要求(这将计算字符串中的字符数)。现在在我的手机上,所以我无法显示代码,但我会稍后尝试更新。理想情况下,如果我这样做,问题也应该更新。谢谢。我根据你答案的结构找到了答案。非常有用
vapply(strsplit(vector, " "), myFun, character(1L))
vapply(strsplit(vector, " "), myFun, character(1L), onlyUnique = FALSE)
vapply(strsplit(vector, " "), myFun, character(1L), minLen = 0)