【问题标题】:Remove duplicate values on each string in R [duplicate]删除 R 中每个字符串上的重复值 [重复]
【发布时间】:2019-05-28 13:46:13
【问题描述】:

我有一个包含两列的数据框:

 VAR1.                     VAR2.

  A.              102 million; 102 million

  B.      0.1 million; 2 million; 0.1 million; 2 million

我想删除 VAR2 的重复值。对于每一行,获得

 VAR1.           VAR2.

  A.          102 million

  B.     0.1 million; 2 million

我该怎么办?

感谢您的建议。

【问题讨论】:

    标签: r duplicates


    【解决方案1】:

    使用基数 R,我们可以拆分 ";"paste 上的字符串 unique VAR2 条目

    sapply(strsplit(df$VAR2, ";"), function(x) paste(unique(x), collapse = ";"))
    #[1] "102 million"           "0.1 million;2 million"
    

    使用dplyrtidyr,我们可以使用separate_rowsVAR2 带入不同的行,然后paste 每组仅unique 条目。

    library(dplyr)
    library(tidyr)
    
    df %>%
     separate_rows(VAR2, sep = ";") %>%
     group_by(VAR1) %>%
     summarise(VAR2 = paste(unique(VAR2), collapse = ";"))
    
    #  VAR1  VAR2                 
    #  <fct> <chr>                
    #1 A     102 million          
    #2 B     0.1 million;2 million
    

    【讨论】:

      【解决方案2】:

      这是一个使用sub 的解决方案,似乎可行:

      x <- "0.1 million; 2 million; 0.1 million; 2 million"
      gsub("\\b(\\d+(?:\\.\\d+)?) ([^;]+); (?=.*\\b\\1 \\2\\b)", "", x, perl=TRUE)
      
      [1] "0.1 million; 2 million"
      

      这里使用的一般策略是匹配一个带有可选小数部分的数字,后跟另一个单词,前提是该数字单词术语在输入字符串的下游至少出现一次。如果它再次出现,那么我们通过替换为空字符串来删除第一个术语。请注意,不会删除最后出现的一对术语,因为正向预测会失败。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-30
        • 1970-01-01
        • 2015-11-16
        • 1970-01-01
        • 2020-11-16
        • 2020-03-30
        • 1970-01-01
        • 2013-12-15
        相关资源
        最近更新 更多