我在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")
感谢您的帮助!
答案 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