对于DF中的每一行,检查向量中是否存在匹配项

时间:2017-12-11 18:03:50

标签: r

我在R中有一个数据帧,我想检查向量中找到DF中字符串匹配项的任何记录。我似乎无法让它完全正确地工作。

exampledf=as.data.frame(c("PIT","SLC"))
colnames(exampledf)="Column1"
examplevector=c("PITTPA","LAXLAS","JFKIAH")

这让我接近,但结果是c(1,0,0)而不是每行0或1

exampledf$match=by(exampledf,1:nrow(exampledf),function(row) ifelse(grepl(exampledf$Column1,examplevector),1,0))

预期结果:

exampledf$match=c("1","0")

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

grepl返回与examplevector长度相同的逻辑向量。您可以使用any()函数进行换行(相当于使用上面建议的sum())。

以下是您的代码的略微修改形式:

exampledf$match = vapply(exampledf$Column1, function(x) any(grepl(x, examplevector)), 1L)

答案 1 :(得分:1)

所以这是我的解决方案:

library(dplyr)
exampledf=as.data.frame(c("PIT","SLC"))
colnames(exampledf)="Column1"
examplevector=c("PITTPA","LAXLAS","JFKIAH")

pmatch做你想要的,并给你它匹配的示例向量。使用duplicates.ok是因为您希望显示多个匹配项。如果你不想要那个,那么让参数等于false。我只是使用dpylr来创建新列,但是你可以这样做。

exampledf %>% mutate(match_flag = ifelse(is.na(pmatch(Column1, examplevector, duplicates.ok = T)),0
                                         , pmatch(Column1, examplevector, duplicates.ok = T)))

   Column1 match_flag
1     PIT          1
2     SLC          0