【问题标题】:Reverse filter/subset dataframe反向过滤器/子集数据框
【发布时间】:2016-04-11 02:57:07
【问题描述】:

我的数据类似于:

print(dat)
i1  i2  node_id
 4   4        8
 4   5        8
 3   2        9
 5   1        8

使用 dplyr 的 filtersubset(最好是过滤器)我想反向过滤数据,所以我得到了这个:

 print(dat)
 i1  i2  node_id
 4   4        8
 4   5        8
 5   1        8

我说反向过滤器是因为不是过滤或子设置,例如:

dat<-filter(dat,node_id==8)
dat<-subset(dat,node_id==8)

我想通过告诉 R 我想保留除 node_id==9 之外的所有内容来做到这一点 我试过了:

dat<-filter(dat,-node_id==9)
dat<-subset(dat,-node_id==9)

但两者都不起作用。有什么建议?谢谢。

【问题讨论】:

  • 试试filter(dat, node_id != 9)
  • 啊,完美,谢谢!

标签: r filter dataframe dplyr subset


【解决方案1】:

&lt;, &gt;, &lt;=, &gt;= 的反向过滤

我知道这不是特别要求的,但是如果对 &lt;, &gt;, &lt;=, &gt;= 条件的情况进行反向过滤,如果你想要所有 node_id &lt; 9following 都可以工作

dat &lt;- dat %&gt;% filter(!node_id &gt;= 9)

相同

dat &lt;- dat %&gt;% filter(node_id &lt; 9)

【讨论】:

  • 非常感谢我会用这个。
【解决方案2】:

subset() 有多个条件

这与 OP 没有直接关系,但可以帮助其他人解决您的 subset() 具有多个条件的情况。

假设您有一个数据框dat,并且您有一个名为A.dfdat 子集。你想得到B.df,它从dat中排除了A.df

One approach 正在使用! 反转条件组合:

A.df <- subset(dat, Col1 %in% criteria | Col2 %in% criteria | Col3 %in% criteria)

变成

B.df <- subset(dat, !(Col1 %in% criteria | Col2 %in% criteria | Col3 %in% criteria))

但这可能不适用于嵌套子集(即子集的子集等)。

另一种方法是使用rownames() 排除某些行。这种方法适用于具有多个条件的子集和嵌套子集。

假设 dat 有 1,2,3,4,5 行,而 A.df 有 3,4 行。因此,我们排除这些行以获得 B.df 的 1,2,5

dat$ID <- rownames(dat)
B.df <- subset(dat, !(ID %in% rownames(A.df)))

第一行是获取dat 每一行的名称(默认为1,2,3,...)并将它们附加到新列中。

【讨论】:

    猜你喜欢
    • 2019-07-17
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    相关资源
    最近更新 更多