Modo standard per rimuovere più elementi da un dataframe

Qual è il modo migliore per rimuovere più elementi da un dataframe? Nel mio caso ho tutti i giorni del mese in un frame di dati e voglio rimuovere diversi giorni. Qualcosa come sotto funziona bene per un giorno.

m[m$date!="01/31/11",] 

Comunque se provo qualcosa del genere

 m[m$date!=c("01/31/11","01/30/11"),] 

Ricevo un messaggio di avvertimento

 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 

Sembra funzionare per due giorni, ma se aggiungo il 29/01/11 al vettore mostra tutti i giorni, ma il 31/01/11.

nzcoops è azzeccato con il suo suggerimento. Ho posato questa domanda nella chat di R qualche tempo fa e Paul Teetor ha suggerito di definire una nuova funzione:

 `%notin%` <- function(x,y) !(x %in% y) 

Che può essere usato come segue:

 foo <- letters[1:6] > foo[foo %notin% c("a", "c", "e")] [1] "b" "d" "f" 

Inutile dire che questa piccola gem è ora nel mio profilo R e viene usata abbastanza spesso.

Penso per quello che vuoi:

 m[!m$date %in% c("01/31/11","01/30/11"),] 

modo interessante è usare la funzione Negate per crearne una nuova:

 `%ni%` <- Negate(`%in%`) 

di quanto tu possa usarlo per trovare elementi non intersecati

Per quanto riguarda alcune delle domande di cui sopra, ecco una soluzione conforms al tidyverse . Ho usato anti_join da dplyr per ottenere lo stesso effetto:

 library(tidyverse) numbers <- tibble(numbers = c(1:10)) numbers_to_remove <- tibble(number = c(3, 4, 5)) numbers %>% anti_join(numbers_to_remove)