【问题标题】:R - How to search for a string in one column in other columns of a data frame (ignoring spaces)R - 如何在数据框的其他列中的一列中搜索字符串(忽略空格)
【发布时间】:2017-03-10 12:02:35
【问题描述】:

这与this question 非常相似,但多了一层。我正在查看一列中的字符串是否存在于另一列中。但是由于对于某些行,该列是空的,所以当我运行下面的代码时,我会得到很多“TRUE”,因为它们只匹配空格。如何忽略空格而只匹配字符?

word <- c('Hello','','nyc', '')
keywords <- c('hello goodbye nyc','hello goodbye nyc', 'hello goodbye nyc', 'hello goodbye nyc')
df <- data.frame(word, keywords, stringsAsFactors=F)

我想要的是添加一个新列 (word_exists),它告诉我列 'word' 中的字符串是否存在于 'keywords' 中。我试过了:

df$word_exists <- mapply(grepl, pattern=df$keywords, x=df$word)

但是得到所有'TRUE',我认为这是因为它识别'keywords'中的空格并将它们匹配到空'words'。有什么建议? 谢谢!

【问题讨论】:

    标签: r grepl


    【解决方案1】:

    只需使用nzchar 来检查您的模式是否有字符:

    transform(df, word_exists=mapply(grepl, pattern=word, x=keywords) & nzchar(word))
    #    word          keywords word_exists
    # 1 Hello hello goodbye nyc       FALSE
    # 2       hello goodbye nyc       FALSE
    # 3   nyc hello goodbye nyc        TRUE
    # 4       hello goodbye nyc       FALSE
    

    【讨论】:

      【解决方案2】:

      快速解决方法是将您的空白字符串替换为NAs。像这样的东西有效:

      df[df$word=="","word"]<-NA
      df$word_exists <- as.logical(mapply(grepl, pattern=df$word, x=df$keywords))
      
              word          keywords word_exists
      1 Hello hello goodbye nyc       FALSE
      2  <NA> hello goodbye nyc          NA
      3   nyc hello goodbye nyc        TRUE
      4  <NA> hello goodbye nyc          NA
      

      【讨论】:

        猜你喜欢
        • 2015-08-27
        • 2017-07-27
        • 2022-01-01
        • 2016-11-02
        • 2022-01-19
        • 2021-02-04
        • 2021-10-21
        • 2010-11-20
        • 1970-01-01
        相关资源
        最近更新 更多