【问题标题】:How do keep only unique words within each string in a vector如何在向量中的每个字符串中只保留唯一的单词
【发布时间】:2015-03-17 23:18:19
【问题描述】:

我的数据如下所示:

vector = c("hello I like to code hello","Coding is fun", "fun fun fun")

我想删除重复的单词(空格分隔),即输出应该是这样的

vector_cleaned

[1] "hello I like to code"
[2] "coding is fun"
[3] "fun"

【问题讨论】:

    标签: r string vector duplicates


    【解决方案1】:

    拆分(strsplit 空格),使用unique(lapply),然后将paste 重新组合在一起:

    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))
    

    基于 cmets 更新

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

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

    比较下面的输出,看看它是如何工作的。

    vapply(strsplit(vector, " "), myFun, character(1L))
    vapply(strsplit(vector, " "), myFun, character(1L), onlyUnique = FALSE)
    vapply(strsplit(vector, " "), myFun, character(1L), minLen = 0)
    

    【讨论】:

    • 我可以应用相同的技术来删除拆分字符串中少于 3 个字符的任何单词吗?
    • @shecode,方法类似,但您必须根据nchar 的结果再添加一项要求(这将计算字符串中的字符数)。现在在我的手机上,所以我无法显示代码,但我会尝试稍后更新。理想情况下,如果我这样做,问题也应该更新。
    • 谢谢。我根据您的答案的结构弄清楚了如何做到这一点。很有用
    【解决方案2】:

    我花了一段时间寻找一个数据框,它对 tidyverse 友好的版本,所以我想我会粘贴我的详细解决方案:

    library(tidyverse)
    
    df <- data.frame(vector = c("hello I like to code hello",
                                "Coding is fun", 
                                "fun fun fun"))
    
    df %>% 
      mutate(split = str_split(vector, " ")) %>% # split
      mutate(split = map(.$split, ~ unique(.x))) %>% # drop duplicates
      mutate(split = map_chr(.$split, ~paste(.x, collapse = " "))) # recombine
    

    结果:

    #>                       vector                split
    #> 1 hello I like to code hello hello I like to code
    #> 2              Coding is fun        Coding is fun
    #> 3                fun fun fun                  fun
    

    由reprex package (v0.3.0) 于 2021-01-03 创建

    【讨论】:

      猜你喜欢
      • 2017-07-03
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 2015-06-02
      • 2021-03-07
      • 1970-01-01
      • 2018-10-17
      相关资源
      最近更新 更多