varias valores una superponer studio graficos graficas eliminar elementos contar columna cambiar r

valores - superponer graficas en r



¿Cómo eliminar múltiples valores de un vector? (8)

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 bucle el vector y hago algo como:

a[!a=NUMBER_TO_REMOVE]

Pero creo que hay una función que lo hace automáticamente.


El operador %in% te dice qué elementos están entre los numers para eliminar:

> a <- sample (1 : 10) > remove <- c (2, 3, 5) > a [1] 10 5 2 7 1 6 3 4 8 9 > a %in% remove [1] FALSE TRUE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE > a [! a %in% remove] [1] 10 7 1 6 4 8 9


Primero podemos definir un nuevo operador,

"%ni%" = Negate( "%in%" )

Entonces, es como x no en eliminar

x <- 1:10 remove <- c(2,3,5) x <- x[ x %ni% remove ]

o por qué ir para eliminar, ve directamente

x <- x[ x %ni% c(2,3,5)]


Puedes hacerlo de la siguiente manera:

> x<-c(2, 4, 6, 9, 10) # the list > y<-c(4, 9, 10) # values to be removed > idx = which(x %in% y ) # Positions of the values of y in x > idx [1] 2 4 5 > x = x[-idx] # Remove those values using their position and "-" operator > x [1] 2 6

Dentro de poco

> x = x[ - which(x %in% y)]


Puedes usar setdiff .

Dado

a <- sample(1:10) remove <- c(2, 3, 5)

Entonces

> a [1] 10 8 9 1 3 4 6 7 2 5 > setdiff(a, remove) [1] 10 8 9 1 4 6 7


en lugar de

x <- x[! x %in% c(2,3,5)]

usando los paquetes purrr y margrittr , puedes hacer:

your_vector %<>% discard(~ .x %in% c(2,3,5))

esto permite subconjuntos usando el nombre del vector solo una vez. Y puedes usarlo en tuberías :)


ACTUALIZAR:

Todas las respuestas anteriores no funcionarán para los valores repetidos, @ la respuesta de BenBolker usando el predicado duplicated() resuelve esto:

full_vector[!full_vector %in% searched_vector | duplicated(full_vector)]

Respuesta original: aquí escribo una pequeña función para esto:

exclude_val<-function(full_vector,searched_vector){ found=c() for(i in full_vector){ if(any(is.element(searched_vector,i))){ searched_vector[(which(searched_vector==i))[1]]=NA } else{ found=c(found,i) } } return(found) }

entonces, digamos full_vector=c(1,2,3,4,1) y full_vector=c(1,2,3,4,1) searched_vector=c(1,2,3) .

exclude_val(full_vector,searched_vector) devolverá (4,1), sin embargo, las respuestas anteriores devolverán solo (4) .


q <- c(1,1,2,2,3,3,3,4,4,5,5,7,7) rm <- q[11] remove(rm) q q[13] = NaN q q %in% 7

Esto establece el 13 en un vector para que no sea un número (NAN) muestre la eliminación falsa (q [c (11,12,13)]) si prueba esto, verá que la función de eliminación no funciona en el número del vector. eliminas todo el vector, pero tal vez ni un solo elemento.


x <- list("a", "b", "c", "d", "e"); # example list x[-2]; # without 2nd element x[-c(2, 3, 5)]; # without 2nd,3rd,5th element