slow - dicionario.de antonimos
Opuesto de% en% (6)
Una variable categórica V1 en una trama de datos D1 puede tener valores representados por las letras de la A a la Z. Quiero crear un subconjunto D2, que excluye algunos valores, por ejemplo, B, N y T. Básicamente, quiero un comando que sea el opuesto de %in%
D2 = subset(D1, V1 %in% c(''B'',''N'',T''))
Aquí hay una versión que utiliza el filter
en dplyr
que aplica la misma técnica que la respuesta aceptada al negar la lógica con!
D2 <- D1 %>% dplyr::filter(!V1 %in% c(''B'',''N'',T''))
Otra solución podría ser el uso de setdiff
D1 = c("A",..., "Z") ; D0 = c("B","N","T")
D2 = setdiff(D1, D0)
D2
es tu subconjunto deseado.
Puedes usar el !
operador para básicamente hacer VERDADERO FALSO y todo FALSO VERDADERO. asi que:
D2 = subset(D1, !(V1 %in% c(''B'',''N'',T'')))
EDITAR: también puede crear un operador usted mismo:
''%!in%'' <- function(x,y)!(''%in%''(x,y))
c(1,3,11)%!in%1:10
[1] FALSE FALSE TRUE
Qué tal si:
''%ni%'' <- Negate(''%in%'')
c(1,3,11) %ni% 1:10
# [1] FALSE FALSE TRUE
Si miras el código de %in%
function (x, table) match(x, table, nomatch = 0L) > 0L
entonces deberías poder escribir tu versión de opuesto. yo suelo
`%not in%` <- function (x, table) is.na(match(x, table, nomatch=NA_integer_))
Otra forma es:
function (x, table) match(x, table, nomatch = 0L) == 0L
purrr::compose()
es otra forma rápida de definir esto para su uso posterior, como en:
`%!in%` <- compose(`!`, `%in%`)