如何在r中返回具有部分子串匹配的逻辑向量

时间:2014-11-11 18:31:42

标签: r

所以,我想要做的是在子字符串上将一列与另一列匹配,如果存在部分匹配则返回true

A            B          C
hello      helloworld  true
worldhello hello       true
dog        hello       false

这是我的两个列(A和B)以及我想要返回的逻辑向量(C)的快速示例

3 个答案:

答案 0 :(得分:1)

调用您的示例df,这样就可以了:

sapply(1:nrow(df),function(i)with(df[i,],grepl(A,B)|grepl(B,A)))
# [1]  TRUE  TRUE FALSE

但是,可能有一种更有效的方法。

答案 1 :(得分:1)

旧问题,但记录:您也可以使用dplyr实现此目的:

从@darwin获取矩阵并应用@jhoward中的解决方案,解决方案如下所示:

as.data.frame(a) %>% 
 rowwise() %>% 
 mutate(V3 = grepl(V1,V2)|grepl(V2,V1) )

您需要rowise()因为grepl没有采用向量。

答案 2 :(得分:0)

我认为使用其中一个grep函数将是您最好的选择。既然你需要匹配任何一列,那么你必须做两次。我和jlhoward做的基本相同,但我的是for循环。

a <- matrix(data=c("hello", "helloworld", "worldhello", "hello", "dog", "hello"), nrow=3, byrow=TRUE)
b <- rep(NA, dim(a)[1])
for(i in sequence(dim(a)[1])){
  b[i] <- sum(length(grep(a[i,1], a[i,2])), length(grep(a[i,2], a[i,1]))) > 0
}
cbind(a,b)