Удалить строки на основе нескольких комбинаций в нескольких столбцах - PullRequest
0 голосов
/ 07 февраля 2019

В R мне нужно удалить строки с несколькими комбинациями из двухсимвольных столбцов.Я искал решение, но большинство вопросов либо касаются дубликатов, либо пытаются удалить только одну комбинацию, а не несколько комбинаций на основе двух столбцов.Вот пример df:

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

Здесь мне нужно удалить любой ряд, в котором есть виды млекопитающих с «Gun» в Hunt.Type, и любой ряд, в котором есть виды птиц с «»Лук "Охота. Тип.Итак, я хотел бы закончить с этим:

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

Мой фрейм данных намного больше, чем это с 13 видов и гораздо больше столбцов и строк.

Я пытался сделать это с помощью извлеченияна условиях в базе r, а также dplyr, но я не мог понять это из-за дополнительного усложнения нескольких комбинаций видов.

Я пытался сделать что-то подобное в base r:

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

Но по какой-то причине этот код пропускает некоторые строки с этими условиями и сохраняет другие.для dplyr я не смог получить что-либо даже близко.

1 Ответ

0 голосов
/ 07 февраля 2019

Да, я бы предложил создать вектор всех птиц или млекопитающих (в зависимости от того, что короче) и затем отфильтровать.Нам нужен только один из них, так как другая половина - просто их дополнение.Итак, предположим, что если 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...