反向 filter/subset 数据帧
Reverse filter/subset dataframe
我的数据类似于:
print(dat)
i1 i2 node_id
4 4 8
4 5 8
3 2 9
5 1 8
使用 dplyr 的 filter
或 subset
(最好是过滤器)我想反向过滤数据所以我得到这个:
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)
但都不起作用。有什么建议么?谢谢。
<, >, <=, >=
的反向过滤
我知道这不是特别要求的,但是如果你想要对 <, >, <=, >=
条件进行反向过滤,如果你想要所有 node_id < 9
以下内容都可以工作
dat <- dat %>% filter(!node_id >= 9)
与
相同
dat <- dat %>% filter(node_id < 9)
subset()
有多个条件
这与 OP 没有直接关系,但可以在您 subset()
有多个条件的情况下帮助其他人。
假设您有一个数据框 dat
并且您有一个名为 A.df
的 dat
的子集。你想得到 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
行。因此,我们排除这些行以获得 1,2,5
for B.df.
dat$ID <- rownames(dat)
B.df <- subset(dat, !(ID %in% rownames(A.df)))
第一行是获取 dat
每一行的名称(默认为 1,2,3,...
)并将它们附加到新列。
我的数据类似于:
print(dat)
i1 i2 node_id
4 4 8
4 5 8
3 2 9
5 1 8
使用 dplyr 的 filter
或 subset
(最好是过滤器)我想反向过滤数据所以我得到这个:
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)
但都不起作用。有什么建议么?谢谢。
<, >, <=, >=
的反向过滤
我知道这不是特别要求的,但是如果你想要对 <, >, <=, >=
条件进行反向过滤,如果你想要所有 node_id < 9
以下内容都可以工作
dat <- dat %>% filter(!node_id >= 9)
与
相同dat <- dat %>% filter(node_id < 9)
subset()
有多个条件
这与 OP 没有直接关系,但可以在您 subset()
有多个条件的情况下帮助其他人。
假设您有一个数据框 dat
并且您有一个名为 A.df
的 dat
的子集。你想得到 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
行。因此,我们排除这些行以获得 1,2,5
for B.df.
dat$ID <- rownames(dat)
B.df <- subset(dat, !(ID %in% rownames(A.df)))
第一行是获取 dat
每一行的名称(默认为 1,2,3,...
)并将它们附加到新列。