反向过滤器/子集数据帧

时间:2016-01-06 21:17:55

标签: r filter dataframe dplyr subset

我的数据类似于:

this.getRoomID = function() {
        var me = this;
        $.ajax({

            url: "/get_room_id.php",
            dataType: "json",
            success: function(data) {

                me.assignRoomVar(data.room_id);

            }

        })

    }

使用dplyr' s print(dat) i1 i2 node_id 4 4 8 4 5 8 3 2 9 5 1 8 filter(最好是过滤器)我想反向过滤数据,所以我得到了这个:

subset

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

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

我想通过告诉R我想保留除node_id == 9之外的所有内容 我试过了:

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

但是都不行。有什么建议?感谢。

2 个答案:

答案 0 :(得分:3)

<, >, <=, >=

的反向过滤

我知道没有特别要求,但是如果针对<, >, <=, >=个案例进行反向过滤,如果您希望所有node_id < 9后续工作都可以使用

dat <- dat %>% filter(!node_id >= 9)

相同

dat <- dat %>% filter(node_id < 9)

答案 1 :(得分:0)

subset()具有多个条件

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

假设您有一个数据帧dat,并且有一个名为dat的{​​{1}}子集。您想获取A.df中的B.dfA.df除外。

One approach使用dat来颠倒条件的组合:

!

成为

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)) 排除某些行。这种方法适用于具有多个条件和嵌套子集的子集。

说dat有rownames()行,而A.df有1,2,3,4,5行。因此,我们排除了这些行以获取B.df的3,4

1,2,5

第一行是获取dat$ID <- rownames(dat) B.df <- subset(dat, !(ID %in% rownames(A.df))) 每行的名称(默认为dat)并将其附加到新列中。