【问题标题】:Subsetting data frames while dropping rows which fulfill certain conditions删除满足特定条件的行时对数据帧进行子集化
【发布时间】:2014-07-11 20:29:02
【问题描述】:

我想对数据框进行子集化。大多数情况下,通过在变量中保留满足某些条件的观察并丢弃其余的观察来减少原始数据框。
一个工作代码是:

Companies.Exchanges.1 <- subset(Companies.Exchanges.0,
                                (Frankfurt == 1 & London == 1))

我想反其道而行之:丢弃所有满足特定条件的观察结果,并将其余的(违反最后一个条件的)保留在一个新的数据框中。
我该如何重新编写上述代码才能做到这一点?

【问题讨论】:

  • 也许使用Frankfurt != 1 &amp; London != 1 ?
  • 这将删除我数据集中的所有行。更多关于查找所有位置(二进制变量。在此示例中最多有两个位置:两个)满足“位置 == 1”的所有行,然后删除它们。
  • 应该只剩下满足至少一个 Location 等于 0 @Jilber 条件的行
  • !(Frankfurt == 1 &amp; London == 1) 或等效的Frankfurt != 1 | London != 1

标签: r dataframe subset


【解决方案1】:

尝试使用 ! 否定过滤条件

Companies.Exchanges.1 <- subset(Companies.Exchanges.0,
                            !(Frankfurt == 1 & London == 1))

当您为子集或一般情况指定过滤条件时,R 会获取您的所有行并根据您设置的条件检查它们。可以将其视为向数据框中添加另一个布尔向量,其中匹配条件 = TRUE,而不匹配 = FALSE。这 !运算符反转这个不可见的向量。

【讨论】:

  • 如果(二进制)行包含 1 和 NA 而不是 1 和 0,是否还有其他问题? (不幸的是,我的数据集中就是这种情况)?
  • 确实有。 R 对 NA 值的处理方式不同,因为它们既不能通过也不能通过你的条件。您可以在子集之前将它们更改为 0,或者(假设向量仅采用值 0、1 和 NA)执行类似 !( !Frankfurt %in% c(0,NA) &amp; !London %in% c(0,NA)) 的操作。不是最优雅的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 2021-05-22
  • 1970-01-01
  • 2015-12-09
相关资源
最近更新 更多