【问题标题】:Remove Rows From Data Frame where a Row matches a String从数据框中删除行与字符串匹配的行
【发布时间】:2011-10-02 19:00:09
【问题描述】:

我要删除数据框中某行符合字符串匹配条件的所有行吗?

例如:

A,B,C
4,3,Foo
2,3,Bar
7,5,Zap

我将如何返回一个排除 C = Foo 的所有行的数据框:

A,B,C
2,3,Bar
7,5,Zap

【问题讨论】:

标签: r dataframe


【解决方案1】:

只需使用带有否定符号 (!) 的 ==。如果 dtfm 是您的 data.frame 的名称:

dtfm[!dtfm$C == "Foo", ]

或者,在比较中移动否定:

dtfm[dtfm$C != "Foo", ]

或者,使用subset() 更短:

subset(dtfm, C!="Foo")

【讨论】:

  • 或者只是dftm[dtfm$C != "Foo", ],它是一样的,但更容易阅读。
  • .. 或subset(dftm, C!="Foo")
  • 在任意数量的条件下如何做到这一点?就像您想删除“C = Foo”或“C = Bar”的所有行一样?
  • 那将是另一个问题。但关键是使用 %in% 和 !。在你的例子中 !(C %in% c("Foo", "Bar"))
  • 所有好的反馈。为了完成 Luciano 对 non-subset() 示例的建议,我发现这可以删除不需要的行: dtfm
【解决方案2】:

您可以使用dplyr 包轻松删除这些特定行。

library(dplyr)
df <- filter(df, C != "Foo")

【讨论】:

    【解决方案3】:

    我在数据框中有一列 (A),其中包含 3 个值(是、否、未知)。我只想过滤那些值为“是”的行,这是代码,希望这对你们也有帮助——

    df <- df [(!(df$A=="no") & !(df$A=="unknown")),]
    

    【讨论】:

      【解决方案4】:

      如果你想使用 dplyr,删除行“Foo”:

      df %>%
       filter(!C=="Foo")
      

      【讨论】:

        【解决方案5】:

        我知道这个问题已经得到解答,但如果有人能从中获得帮助,就这样做

        库 (dplyr) df %>% 过滤器(!c=="foo)

        df[!df$c=="foo", ]

        【讨论】:

        • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 2016-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-23
        • 1970-01-01
        • 2022-10-15
        • 2021-11-10
        • 2019-02-14
        相关资源
        最近更新 更多