我有一个数据帧X,其中有两列名为" pattern"和"文字"在R. 我想在相应的文本中搜索每个模式。
为此我使用grepl命令。但是,grepl仅在以下场景中正常工作,它会找到一个模式并针对dataframe列的每一行进行测试:
grepl("findthis",X$text)
但是,当我执行以下操作时,它只会针对第二列的所有记录逐一检查第一列的第一条记录。
grepl(X$pattern,X$text)
我正在寻找一个函数,它将获取X $模式的第一个记录并在X $ text的第一个记录中检查它,然后获取X $模式的第二个记录并在X $的第二个记录中检查它测试
编辑:@akrun给出的解决方案按照我的要求工作。但是,我在嵌套的ifelse中使用了一系列grepl命令。简单地说它就像下面的代码(但有更多的嵌套):
X$result = ifelse(grepl(X$pattern,X$text),1,ifelse(grepl("abc",X$email),2,3)
我该如何解决这个问题?
答案 0 :(得分:3)
一个选项是Map/mapply
unname(mapply(grepl, X$pattern, X$text))
#[1] TRUE FALSE
X <- data.frame(text = c("find this text", "Something else"),
pattern = c("find this", "find that"), stringsAsFactors=FALSE)