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
谢谢!
答案 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)
您还可以将grepl
与Map
一起使用
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