【问题标题】:How to filter specific rows from dataframe using multiple conditions?如何使用多个条件从数据框中过滤特定行?
【发布时间】:2022-11-02 21:54:56
【问题描述】:

我无法根据多个条件删除/过滤行。

我的数据如下所示:

      time              media id    od  gfp
37    0.24    IO+Glc+CasA_gfp  1  0.00   81
38    0.24    IO+Glc+CasA_gfp  2 -0.07  -19
39    0.24    IO+Glc+CasA_gfp  3  0.02  -95
43    0.24 IO+Glc+CasA+Fe_gfp  1  0.01  123
44    0.24 IO+Glc+CasA+Fe_gfp  2  0.01  -17
45    0.24 IO+Glc+CasA+Fe_gfp  3  0.02  -40
85    0.72    IO+Glc+CasA_gfp  1 -0.02  128
86    0.72    IO+Glc+CasA_gfp  2 -0.01  -20
87    0.72    IO+Glc+CasA_gfp  3  0.01  -77
91    0.72 IO+Glc+CasA+Fe_gfp  1  0.14   15
92    0.72 IO+Glc+CasA+Fe_gfp  2  0.11  -12
93    0.72 IO+Glc+CasA+Fe_gfp  3  0.02   15

在绘制特定图表时,我想过滤所有 id=1 和 2 的“IO+Glc+CasA+Fe_gfp”,但仍将其他所有内容保留在数据中。我曾尝试使用过滤功能但没有运气,很可能是因为我错误地使用了该功能。

我希望任何人都可以提供帮助,非常感谢提前!

【问题讨论】:

    标签: r dataframe dplyr filter


    【解决方案1】:
    library(dplyr)
    quux %>%
      filter(id %in% 1:2 | media != "IO+Glc+CasA+Fe_gfp")
    #    time              media id    od gfp
    # 37 0.24    IO+Glc+CasA_gfp  1  0.00  81
    # 38 0.24    IO+Glc+CasA_gfp  2 -0.07 -19
    # 39 0.24    IO+Glc+CasA_gfp  3  0.02 -95
    # 43 0.24 IO+Glc+CasA+Fe_gfp  1  0.01 123
    # 44 0.24 IO+Glc+CasA+Fe_gfp  2  0.01 -17
    # 85 0.72    IO+Glc+CasA_gfp  1 -0.02 128
    # 86 0.72    IO+Glc+CasA_gfp  2 -0.01 -20
    # 87 0.72    IO+Glc+CasA_gfp  3  0.01 -77
    # 91 0.72 IO+Glc+CasA+Fe_gfp  1  0.14  15
    # 92 0.72 IO+Glc+CasA+Fe_gfp  2  0.11 -12
    

    理由:

    • id %in% 1:2 将匹配每个 media,仅对这两个 ID 为 true;然而
    • media != "..",将返回 TRUE 用于任何不是“那个”的东西,因此所有非"IO+Glc+..." 的 ID 也将被传递。

    数据

    quux <- structure(list(time = c(0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72), media = c("IO+Glc+CasA_gfp", "IO+Glc+CasA_gfp", "IO+Glc+CasA_gfp", "IO+Glc+CasA+Fe_gfp", "IO+Glc+CasA+Fe_gfp", "IO+Glc+CasA+Fe_gfp", "IO+Glc+CasA_gfp", "IO+Glc+CasA_gfp", "IO+Glc+CasA_gfp", "IO+Glc+CasA+Fe_gfp", "IO+Glc+CasA+Fe_gfp", "IO+Glc+CasA+Fe_gfp"), id = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), od = c(0, -0.07, 0.02, 0.01, 0.01, 0.02, -0.02, -0.01, 0.01, 0.14, 0.11, 0.02), gfp = c(81L,  -19L, -95L, 123L, -17L, -40L, 128L, -20L, -77L, 15L, -12L, 15L)), class = "data.frame", row.names = c("37", "38", "39", "43", "44", "45", "85", "86", "87", "91", "92", "93"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 2020-05-02
      • 2023-01-04
      • 2015-07-14
      • 1970-01-01
      • 2020-08-29
      相关资源
      最近更新 更多