【问题标题】:string matching for exact value in a column when a string as a comma in R当字符串作为R中的逗号时,字符串匹配列中的确切值
【发布时间】:2018-11-28 21:17:19
【问题描述】:

我想找到给定查询的完全匹配项(下面的示例是查询“ABC”。但是我想要所有带有 ABC 的行,或者如果它用逗号分隔。这意味着我想要想要的输出如下。

样本数据:

query = c('ABC')

col1 = c("ABC", "DEF", "ABCDE", "DAC", "CBA,ABC,LMN1")
col2 = c("DEF", "EQ", "AC", "DE,ABC", "QSX")
col3 = c(12, 30, NA, 0, 54)
df = data.frame(col1, col2, col3)

期望的输出:

            col1      col2     col3
1            ABC       DEF       12
4            DAC    DE,ABC        0
5   CBA,ABC,LMN1       QSX       54

我尝试使用grepl,但得到以下信息(请参阅标有 ​​3 的行)。

df[with(df, grepl(query, col1)|grepl(query, col2)),]

我的输出(不需要):

            col1      col2     col3
1            ABC       DEF       12
3          ABCDE        AC       NA
4            DAC    DE,ABC        0
5   CBA,ABC,LMN1       QSX       54

确保获得所需行的最佳方法是什么?

【问题讨论】:

    标签: r dataframe grepl


    【解决方案1】:

    我们需要“查询”中的单词边界。遍历列,将greplReduce 应用于单个逻辑vector|,使用它来子集行

    queryN <- paste0("\\b", query, "\\b")
    df[Reduce(`|`, lapply(df[1:2], grepl, pattern = queryN)),]
    #           col1   col2 col3
    #1          ABC    DEF   12
    #4          DAC DE,ABC    0
    #5 CBA,ABC,LMN1    QSX   54
    

    或者使用OP的方法

    df[with(df, grepl(queryN, col1)|grepl(queryN, col2)),]
    

    【讨论】:

      猜你喜欢
      • 2019-07-01
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      相关资源
      最近更新 更多