在 for 循环中使用 Grepl 获得精确匹配
Using Grepl to get an exact match, whilst in a for loop
在使用矢量过滤数据帧时,我无法让 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 个变量,其中已被正确过滤。
试试这个:
list_df<-list()
for (i in 1:length(my_vector))
{
df<-my_df%>%
filter(grepl(paste0("\b",my_vector[i],"\b"),My_vehicles))
list_df[[i]]=df
}
在使用矢量过滤数据帧时,我无法让 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 个变量,其中已被正确过滤。
试试这个:
list_df<-list()
for (i in 1:length(my_vector))
{
df<-my_df%>%
filter(grepl(paste0("\b",my_vector[i],"\b"),My_vehicles))
list_df[[i]]=df
}