【问题标题】:Remove rows based on reverse condition in columns根据列中的反向条件删除行
【发布时间】:2022-01-11 10:40:27
【问题描述】:

我有一个大型数据集需要这样做,但我会针对较小的数据集描述问题。

Var1 Var2
A B
A C
A D
B A
E F
G H

我想只保留一个值为“A-B”的行,并删除具有反向“B-A”的行。所有其他行也应该保留。

提前致谢。

【问题讨论】:

    标签: r filter


    【解决方案1】:
    df[!(df$Var1 == 'B' & df$Var1 == 'A'), ]
    

    使用 dplyr:

    dplyr::filter(df, !(Var1 == 'B' & Var1 == 'A'))
    

    可重现的输入数据:

    df <- data.frame(
      Var1 = c('A', 'A', 'A', 'B', 'E', 'G'),
      Var2 = c('B', 'C', 'D', 'A', 'F', 'H')
    )
    

    【讨论】:

    • 是的,对于少量的观察可以这样做,但我的实际数据集非常大,所以我不能这样硬编码。
    • 所以你有更多的列?这是什么逻辑,他们不能打破字母顺序?
    • 它可以满足您的要求,并且建议的解决方案适用于任何数据集,无论其大小。如果这不能解决您的问题,请更清楚地说明您需要完成什么,使用 dput 发布您的数据子集,并展示所需结果的示例。
    【解决方案2】:

    如果我理解正确

    df <- df <- data.frame(
      Var1 = c('A', 'A', 'A', 'B', 'E', 'G'),
      Var2 = c('B', 'C', 'D', 'A', 'F', 'H')
    )
    
    fltr <- !duplicated(apply(df, 1, function(x) paste0(sort(x), collapse = "")))
    
    df[fltr, ]
    #>   Var1 Var2
    #> 1    A    B
    #> 2    A    C
    #> 3    A    D
    #> 5    E    F
    #> 6    G    H
    

    reprex package 创建于 2022-01-11 (v2.0.1)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2018-03-03
      • 1970-01-01
      相关资源
      最近更新 更多