【问题标题】:Properly eliminating duplicates from overlapping strings in R?正确消除R中重叠字符串的重复项?
【发布时间】:2012-10-24 17:15:48
【问题描述】:

我想向this issue 提出后续问题,因为出现了另一个问题:我发现了属于多个类别(艺术与人文和社会科学)的科目(例如文化研究) ),即必须考虑重叠。

我有很长的类别列表,例如这个机器可读的例子:

AB <- c("Science","Arts & Humanities","Arts & Humanities; Social Sciences","Science","Arts & Humanities; Arts & Humanities; Social Sciences","Science","Science; Social Sciences","Social Sciences; Science")  

所以它看起来像这样:

> AB  
[1] "Science"                                               "Arts & Humanities"  
[3] "Arts & Humanities; Social Sciences"                    "Science"  
[5] "Arts & Humanities; Arts & Humanities; Social Sciences" "Science"  
[7] "Science; Social Sciences"                              "Social Sciences; Science"  

我想编辑这些术语并消除重复项以获得此结果:

[1] "Science"                                    "Arts & Humanities"  
[3] "Arts & Humanities; Social Sciences"         "Science"  
[5] "Arts & Humanities; Social Sciences"         "Science"  
[7] "Science; Social Sciences"                   "Science; Social Sciences"  

所以我正在寻找另一个循环来消除 #5 中的重复项。我尝试使用 strsplit()unique() 但这不起作用:

> unique(strsplit(AB, "; *"))  
[[1]]  
[1] "Science"  

[[2]]  
[1] "Arts & Humanities"  

[[3]]  
[1] "Arts & Humanities" "Social Sciences"  

[[4]]  
[1] "Arts & Humanities" "Arts & Humanities" "Social Sciences"  

[[5]]  
[1] "Social Sciences" "Science"  

所以我想再次问你:我怎样才能实现上面提到的正确输出? 非常感谢您的考虑!

【问题讨论】:

    标签: regex r edit


    【解决方案1】:

    我认为它与尾随或前导空格有关。如果您将此应用于 AB,它将为您处理此问题:

    fun <- function(text.var){
        x <- unlist(strsplit(text.var, ";"))
        Trim <- function(x) gsub("^\\s+|\\s+$", "", x)
        paste(sort(unique(Trim(x))), collapse="; ")
    }
    
    sapply(AB, fun, USE.NAMES = FALSE)
    

    产量:

    > sapply(AB, fun, USE.NAMES = FALSE)
    [1] "Science"                            "Arts & Humanities"                 
    [3] "Arts & Humanities; Social Sciences" "Science"                           
    [5] "Arts & Humanities; Social Sciences" "Science"                           
    [7] "Science; Social Sciences"           "Science; Social Sciences"    
    

    【讨论】:

    • gdata包里还有trim()
    • 非常感谢您的回复,@Tyler Rinker!不幸的是,这给了我 唯一性错误(Trim(x)) :找不到函数“Trim”我必须先安装 gdata 包吗?
    • 很抱歉。我没有将它定义为一个函数。立即尝试。
    • 非常感谢您回复我,@Tyler Rinker!我很感激!现在效果很好!我可以问你点别的吗?我必须在函数中添加什么,以便将相同的术语(例如“科学;社会科学”和“社会科学;科学”)理解为相同的并归结为一个类别,尽管它们的词序不同?我在上面的示例中编辑了第七条记录以反映这一点。
    • @user1496104 好问题。我可以要求您提出一个新问题,也许可以链接到这个问题。这使这个线程更加干净。
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2020-05-23
    • 2016-07-31
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    相关资源
    最近更新 更多