在R中,我需要从2个字符列中删除具有多个组合的行。我一直在寻找解决方案,但是大多数问题要么处理重复项,要么仅尝试删除1个组合,而不是基于两列的多个组合。这是df的示例:
Species Harvest Hunt.Type
Sheep 1 Gun
Goat 4 Bow
Turkey 3 Gun
Pig 2 Bow
Quail 6 Bow
在这里,我需要删除所有具有Hunt.Type中带有“ Gun”的哺乳动物物种的行,以及任何一行具有“ Bow” 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,我什至无法得到任何东西。
答案 0 :(得分: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