Стандартный способ удаления нескольких элементов из фрейма данных
Каков наилучший способ удаления нескольких элементов из фреймворка данных? В моем случае у меня есть все дни месяца в кадре данных и вы хотите удалить несколько дней. Что-то вроде ниже работает отлично на один день.
m[m$date!="01/31/11",]
Однако, если я попробую что-то вроде
m[m$date!=c("01/31/11","01/30/11"),]
Я получаю предупреждающее сообщение
Warning message:
In `!=.default`(m$date, c("01/31/11", "01/30/11")) :
longer object length is not a multiple of shorter object length
Calls: [ ... [.data.frame -> Ops.dates -> NextMethod -> Ops.times -> NextMethod
Кажется, что он работает два дня, но если я добавлю 01/29/11 к вектору, он показывает все дни, но 01/31/11.
Ответы
Ответ 1
nzcoops находится на месте с его предложением. Я задал этот вопрос в R Chat некоторое время назад, и Пол Тетор предложил определить новую функцию:
`%notin%` <- function(x,y) !(x %in% y)
который затем можно использовать следующим образом:
foo <- letters[1:6]
> foo[foo %notin% c("a", "c", "e")]
[1] "b" "d" "f"
Излишне говорить, что этот маленький драгоценный камень теперь находится в моем профиле R и используется довольно часто.
Ответ 2
Я думаю, что вы хотите:
m[!m$date %in% c("01/31/11","01/30/11"),]
Ответ 3
Классный способ - использовать функцию Negate для создания нового:
`%ni%` <- Negate(`%in%`)
чем вы можете использовать его для поиска непересекающихся элементов