Tengo un vector como: a = c(1:10)y necesito eliminar varios valores, como:2, 3, 5
¿Cómo eliminar esos números ( NO son las posiciones en el vector) en el vector?
en este momento, repito el vector y hago algo como:
a[!a=NUMBER_TO_REMOVE]
Pero creo que hay una función que lo hace automáticamente.

setdiffes mejor, ya que hace todo en una operación y hace referencia al vector modificado solo una vez.aque no estánremovetambién. Si eso no es un problema, también puedes usarlosetdiff.setdiff, por cierto, usosmatchpara los cuales%in%es un atajo.Puedes usar
setdiff.Dado
Luego
fuente
aes el resultado de otra función para que pueda hacer cosas en una línea en lugar de 3 y una variable temporal%in%solución si el vector de entrada contiene duplicados (en cuyo casosetdiffsolo devolverá el conjunto único , es decir, sin duplicados)fsetdiffdeldata.tablepaquete tiene unaallbandera (por defecto F) que permite mantener duplicados en el vector de entrada.Puedes hacerlo de la siguiente manera:
Dentro de poco
fuente
whichaquí. Básicamente es lo mismo que @cbeleites answer.whichdevuelve índices de valores VERDADEROS. Por lo tanto, el signo menos se puede usar para decir "los índices que no sean estos índices". Tambiénwhiches más legible ya que está más cerca del lenguaje natural.en vez de
usando los paquetes
purrrymagrittrpuedes hacer:Esto permite
subsetutilizar el nombre del vector solo una vez. Y puedes usarlo en tuberías :)fuente
Primero podemos definir un nuevo operador,
Entonces, es como x no en eliminar
o por qué ir para eliminar, ir directamente
fuente
ACTUALIZAR:
Todas las respuestas anteriores no funcionarán para los valores repetidos, la respuesta de @BenBolker usando un
duplicated()predicado resuelve esto:Respuesta original: aquí escribo una pequeña función para esto:
entonces, digamos
full_vector=c(1,2,3,4,1)ysearched_vector=c(1,2,3).exclude_val(full_vector,searched_vector)regresará (4,1), sin embargo, las respuestas anteriores solo devolverán(4).fuente
full_vector[!full_vector %in% searched_vector | duplicated(full_vector)]?full_vector = c(1,1,1,2,3); searched_vector = c(1,1,3);eso produce en1, 1, 2lugar de la respuesta correcta1, 2.removeif <- function(from, where) { for (i in where) if (i %in% from) {from = from[-match(i, from)]}; from}Esto establece el 13 en un vector como no un número (NAN), muestra una eliminación falsa (q [c (11,12,13)]) si intenta esto, verá que la función de eliminación no funciona en el número de vector. elimina todo el vector pero quizás no un solo elemento.
fuente
También hay algo
subsetque puede ser útil a veces:fuente