Opuesto a %in%: excluye filas con valores especificados en un vector

Resuelto user702432 asked hace 54 años • 13 respuestas

Una variable categórica V1 en un marco de datos D1 puede tener valores representados por las letras de la A a la Z. Quiero crear un subconjunto D2, que excluya algunos valores, digamos, B, N y T. Básicamente, quiero un comando que sea lo contrario a%in%

D2 = subset(D1, V1 %in% c("B", "N", "T"))
user702432 avatar Jan 01 '70 08:01 user702432
Aceptado

Puede utilizar el !operador para básicamente hacer que cualquier VERDADERO FALSO y cada FALSO VERDADERO. entonces:

D2 = subset(D1, !(V1 %in% c('B','N','T')))

EDITAR: También puedes crear un operador tú mismo:

'%!in%' <- function(x,y)!('%in%'(x,y))

c(1,3,11)%!in%1:10
[1] FALSE FALSE  TRUE
Sacha Epskamp avatar Apr 29 '2011 12:04 Sacha Epskamp

Qué tal si:

`%ni%` <- Negate(`%in%`)
c(1,3,11) %ni% 1:10
# [1] FALSE FALSE  TRUE
Spencer Castro avatar Oct 21 '2017 20:10 Spencer Castro

Aquí hay una versión que utiliza filterin dplyrque aplica la misma técnica que la respuesta aceptada al negar lo lógico con !:

D2 <- D1 %>% dplyr::filter(!V1 %in% c('B','N','T'))
user29609 avatar May 17 '2018 00:05 user29609