在另一列的字符串中搜索一列中的文本

时间:2018-06-19 16:50:49

标签: r

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

谢谢!

4 个答案:

答案 0 :(得分:1)

使用str_detect中的stringr

library(stringr)
str_detect(df1$column1, df1$column2)

[1]  TRUE FALSE  TRUE

或仅使用将grepl与apply结合的基R:

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

答案 1 :(得分:1)

我们可以使用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)

答案 2 :(得分:0)

您还可以将greplMap一起使用

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

输出

 #_US_  _MX_  _NZ_ 
 #TRUE FALSE  TRUE 

答案 3 :(得分:0)

基本方法是使用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