【问题标题】:Using Grepl to get an exact match, whilst in a for loop在 for 循环中使用 Grepl 获得完全匹配
【发布时间】: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))
  • 谢谢你,两个很好的答案,他们工作

标签: r for-loop grepl


【解决方案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
}

【讨论】:

    猜你喜欢
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2011-09-25
    • 1970-01-01
    相关资源
    最近更新 更多