【问题标题】:filter rows where a column has a string 'car' but not 'carry'过滤列包含字符串“car”但不包含“carry”的行
【发布时间】:2017-08-02 08:56:24
【问题描述】:

如何使用 grep 或任何其他库根据具有“car”但不包含“carry”的列值过滤行?

rows <- (df[grep("car", df$item_text),])

【问题讨论】:

    标签: r string


    【解决方案1】:

    假设您确实想要“car1”和“car2”,但不想要“carry”:

    rows <- df[grepl("car", df$item_text) & !grepl("carry", df$item_text),]
    

    示例数据:

    df = data.frame(item_text=c("car1","car2","carry","carry1"),id=seq(1,4))
    

    示例输出:

      item_text id
    1      car1  1
    2      car2  2
    

    【讨论】:

      【解决方案2】:
      rows <- df[df$item_text=="car",]
      

      【讨论】:

      • 如果car这个词在一个字符串中(我假设这是基于OP的grep请求的情况)那么你的方法将不起作用
      【解决方案3】:
      df = data.frame(item_text = c("car", "a car", "my carry", "carry a car", "something"))    
      subset(df, subset = grepl("car", df$item_text) & !grepl("carry", df$item_text))  
      

      【讨论】:

      • @akrun 我不是反对者,但可能是因为之前另一个用户发布了相同的答案
      • @Sotos 但是,如果你检查那个答案,那是不对的,grep 给出了一个数字索引。所以逻辑 &amp; 不起作用
      • @akrun 我没有关注。两个答案都使用grepl
      • 使用 grep 的另一个答案现在已编辑为 grepl 并且可以正常工作。我还是不太明白反对票。
      • 我没有刷新页面,所以它可能被刷新了。我是根据Assuming you do want for example 'car1' and 'car2', but not 'carry': rows &lt;- df[grep("car", df$item_text) &amp; !grep("carry", df$item_text),] 发表评论的
      猜你喜欢
      • 2012-03-07
      • 1970-01-01
      • 2014-05-16
      • 2021-12-31
      • 2019-02-21
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多