所以,我想要做的是在子字符串上将一列与另一列匹配,如果存在部分匹配则返回true
A B C
hello helloworld true
worldhello hello true
dog hello false
这是我的两个列(A和B)以及我想要返回的逻辑向量(C)的快速示例
答案 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)