基于多列几种组合中删除行

问题描述 投票:-1回答:1

在R,I需要与从2个字符列的多个组合中删除行。我已经寻找一个解决方案,但大多数问题要么重复交易,或者只是试图消除1点相结合的基础上,两列没有的多种组合。下面是一个例子DF:

Species   Harvest  Hunt.Type
Sheep       1         Gun
Goat        4         Bow
Turkey      3         Gun
Pig         2         Bow
Quail       6         Bow

在这里,我将需要删除与“枪”在Hunt.Type,并有一个“弓” Hunt.Type鸟种的任何行的哺乳动物种类的任何行。所以我想这个结束了:

Species   Harvest  Hunt.Type
Goat        4         Bow
Turkey      3         Gun
Pig         2         Bow

我的数据帧比这13个品种,还有更多的行和列大得多。

我试图做到这一点在基础R以及条件dplyr使用提取物,但我无法弄清楚,因为物种的多种组合的更加复杂的。

我试图在基础R是这样的:

df[df$Species== c("Goat" , "Sheep", "Pig") & 
       df$Hunt.Type == "Gun",]

但由于某些原因,代码省略了一些行与条件,并保持等。对于dplyr,我一直没能得到任何东西,甚至接近。

r
1个回答
0
投票

是的,我会建议创建所有鸟类或哺乳动物的向量(两者中较短的),然后进行过滤。我们只需要其中的一个,因为另一半只是它们的补充。因此,假设如果Species不是鸟那么它的哺乳动物,反之亦然。

所以,在这个例子中,我们可以做

bird.keywords <- c("Turkey", "Quail")
df[!with(df, (Species %in% bird.keywords & Hunt.Type == "Bow") | 
             (!Species %in% bird.keywords) & Hunt.Type == "Gun"),]


#  Species Harvest Hunt.Type
#2    Goat       4       Bow
#3  Turkey       3       Gun
#4     Pig       2       Bow
© www.soinside.com 2019 - 2024. All rights reserved.