【问题标题】:Search for text in one column within a string in another column在另一列中的字符串中搜索一列中的文本
【发布时间】:2018-11-28 17:02:29
【问题描述】:

这里是 R 的新手。一直在搜索此论坛以尝试找到一种方法来搜索同一行数据中的字符串中的文本。我以前使用过 grepl,但我无法让它向下看一列并为每一行应用检查。我觉得这是一个简单的解决方案,但我已经花了几个小时,似乎无法得到它。

基本上我有类似下面第 1 列的内容,需要它来检查第 2 列中的文本是否在第 1 列中,然后在新列中返回 true 或 false。

column 1         column2     result
Target_US_Toy    _US_        TRUE
Target_CA_Toy    _MX_        FALSE
Target_NZ_Toy    _NZ_        TRUE

谢谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    使用来自stringr pacakge 的str_detect

    library(stringr)
    str_detect(df1$column1, df1$column2)
    
    [1]  TRUE FALSE  TRUE
    

    或仅使用基本 R 组合 grepl 与 apply:

    apply(df1,1, function(x){
      grepl(x[2], x[1])
    })
    [1]  TRUE FALSE  TRUE
    

    【讨论】:

    • 谢谢!!!我主要一直在使用 dplyr,还没有开始使用 stringr。可能应该参加我的下一门课程
    【解决方案2】:

    我们可以使用stringr 来做到这一点。

    首先,让我们创建一个数据框:

    df <- data.frame(column1 = c("Target_US_Toy", "Target_CA_Toy"),
                     column2 = c("_US_", "_NZ_"),
                     stringsAsFactors = FALSE)
    

    接下来,我们创建一个名为result的新列:

    library(stringr)
    df$result = str_detect(string = df$column1, pattern = df$column2)
    

    【讨论】:

      【解决方案3】:

      您还可以将greplMap 一起使用

      unlist(Map(grepl, df$column2, df$column1))
      

      输出

       #_US_  _MX_  _NZ_ 
       #TRUE FALSE  TRUE 
      

      【讨论】:

        【解决方案4】:

        基本方法是使用mapply 将一组“并行”参数传递给未在其一个或多个参数位置矢量化的函数:

        dat$ result <- mapply(grepl, dat$column2, dat$column1)
        
        > dat
                column1 column2 result
        1 Target_US_Toy    _US_   TRUE
        2 Target_CA_Toy    _MX_  FALSE
        3 Target_NZ_Toy    _NZ_   TRUE
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-12-10
          • 2017-04-25
          • 2019-08-26
          • 1970-01-01
          • 2021-02-04
          • 2017-06-22
          • 2013-04-17
          相关资源
          最近更新 更多