【发布时间】:2021-01-21 17:13:41
【问题描述】:
在使用向量过滤数据框时,我无法让 grepl 进行完全匹配。我在下面使用了一个可重现的示例:
my_vector<-c("Mazda", "Datsun")
my_df<-data.frame(My_vehicles=c("Mazda", "Mazda2", "Mazda3", "Datsun", "Datsun2", "Datsun3"))
如果我运行下面的代码
grepl("\\bMazda\\b",my_df$My_vehicles)
我得到这个输出是正确的 TRUE FALSE FALSE FALSE FALSE FALSE
然而,我似乎无法让它在循环中工作。下面的例子
list_df<-list()
for (i in 1:length(my_vector))
{ df<-my_df%>%
filter(grepl(my_vector[i],My_vehicles))
list_df[[i]]=df
}
如果我改变了
filter(grepl(my_vector[i],My_vehicles))
到
filter(grepl("\\bmy_vector[i]\\b",My_vehicles))
我没有得到正确的结果。我想要的是从循环中生成的两个新数据帧的列表,每个数据帧都应该有 1 个已正确过滤的变量。
【问题讨论】:
-
filter(grepl(paste0("\\b",my_vector[i],"\\b"),My_vehicles)) -
你也可以
filter(grepl(glue::glue("\\b{my_vector[i]}\\b"),My_vehicles)) -
谢谢你,两个很好的答案,他们工作