【问题标题】:Conditionally remove rows in R有条件地删除 R 中的行
【发布时间】:2021-06-09 10:55:12
【问题描述】:

数据框:

A ; B
x   1
x   7
y   2
y   3
z   9
z   1

我想删除 A=x 和 A=z 的所有行,因为 x 和 z 在 B 列中的值为 1。因此,数据框必须如下所示:

A ; B
y   2
y   3

谢谢,

【问题讨论】:

标签: r statistics


【解决方案1】:
my.data.frame <- subset(data , A != "x" | A != "z")

顺便说一句,How to combine multiple conditions to subset a data-frame using "OR"? 的副本

【讨论】:

    【解决方案2】:

    你可以试试subset

    > subset(df, ! A %in% c("x","z"))
      A B
    3 y 0
    4 y 0
    

    数据

    > dput(df)
    structure(list(A = c("x", "x", "y", "y", "z", "z"), B = c(1L, 
    0L, 0L, 0L, 0L, 1L)), class = "data.frame", row.names = c(NA,
    -6L))
    

    【讨论】:

    • 感谢您的回答。我的 df 有数千行,所以我想根据 B 列的值删除行。
    【解决方案3】:

    data.table 方法

    library( data.table )
    DT <- fread("A  B
    x   1
    x   7
    y   2
    y   3
    z   9
    z   1")
    
    
    DT[ copy(DT)[, temp := sum(B == 1), by = A ]$temp == 0, ]
    
    #    A B
    # 1: y 2
    # 2: y 3
    

    【讨论】:

    • 感谢您的回答。 B 列并不总是有 1 或 0 值。我想删除 A 列中所有在 B 列中至少有一次值为 1 的行。
    • 查看更新的答案。另外,如果 B 的值不是 0 或 1,您可能应该在示例数据中添加一些值。
    • 非常感谢。现在我的问题更像是我的真实基础。
    猜你喜欢
    • 2015-08-31
    • 2014-05-04
    • 2020-08-11
    • 2012-06-05
    • 2021-11-25
    • 2019-04-07
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多