How to delete multiple values from a vector?

r remove element from vector by index
remove value from vector
r remove element from list by index
r remove character from vector
remove odd numbers from vector in r
remove certain values in r
r remove zeros from vector
r remove values greater than

I have a vector like: a = c(1:10) and I need to remove multiple values, like: 2, 3, 5

How to delete those numbers (they are NOT the positions in the vector) in the vector?

at the moment i loop the vector and do something like:

a[!a=NUMBER_TO_REMOVE]

But I think there is a function that does it automatically.

Remove Objects from a Specified Environment, The %in% operator tells which elements are among the numers to be removed: m <- sample (1 : 10) remove <- c (3, 5) m [1] 10 5 2 7 1 6 3 4 8 9 > 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

You can use setdiff.

Given

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

Then

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

How to extract even/odd numbers from a list of numbers in R, How to delete certain elements from a vector in the R programming language - Reproducible Duration: 2:32 Posted: Feb 28, 2020 I have a vector like a = c(1:10) and I need to remove multiple values, like 2, 3, 5. How to delete those numbers (they are NOT the positions in the vector) in the vector? at the moment I loop the vector and do something like: a[!a=NUMBER_TO_REMOVE] But I think there is a function that does it automatically.

You can do it as follows:

> 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

Shortly

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

How to remove value from a vector in R. Declare a boolean vector that has TRUE at all the positions you want to retain and FALSE at those you want to delete. Suppose that vector is y. Then, x[y] will give you the requires output. So, it returned a copy of numpy array by selecting values below 6 & greater than 10 only and we assigned this new array back to arr to have the deletion effect. Delete elements by value or condition using np.argwhere() & np.delete()

instead of

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

using the packages purrr and magrittr, you can do:

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

this allows for subsetting using the vector name only once. And you can use it in pipes :)

How to delete specific values from a vector in the R programming language. More details: Duration: 2:32 Posted: Mar 23, 2020 Say I have this list here: How would I delete say indexes 2, 3, 4, and 5 at the same time? pop doesn't accept multiple values. How else do I do this? You need to do this in a loop, there is no built-in operation to remove a number of indexes at once. Your example is actually a contiguous sequence of indexes, so you can do this:

First we can define a new operator,

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

Then, its like x not in remove

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

or why to go for remove, go directly

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

Previous message: [R] Deleting many list elements in one time; Next than there are to replace > > Isn't it possible to delete multiple elements? If index is a vector of names, you need to convert it to > numbers, using  delete element from vector. Learn more about delete element from vector, cheat sheets . how can I delete 3 from above vector to be. a=[1,2,4,5] thank you. majid

How do I remove a value from a variable in R? Removes from the vector either a single element ( position) or a range of elements ( [first,last) ). This effectively reduces the container size by the number of elements removed, which are destroyed. Because vectors use an array as their underlying storage, erasing elements in positions other than the vector end causes the container to

list , or through a combination of both. All objects thus specified will be removed. If envir is NULL then the currently active environment is searched first. If we want to remove multiple values from a vector, we can use the %in% operator. Have a look at the following R code: vec_new <- vec [ ! vec % in % c ("A", "C") ] # Remove multiple values vec_new # Print updated vector # "B" "D"

How do I remove a specific element from a vector in C++? I do not exactly understand why you do not like .remove but to get the first index corresponding to a value use .index(value): ind=item_list.index('item') then remove the corresponding value: del item_list.pop[ind] .index(value) gets the first occurrence of value, and .remove(value) removes the first occurrence of value

Comments
  • setdiff is better, as it does everything in one operation, and references the amended vector only once.
  • @Olexa: set difference is not always the same as removing all occurences of a given set of numbers from a vector: it will remove duplicates in a that are not in remove as well. If that's not a problem, you can also use setdiff. setdiff, btw, uses match for which %in% is a shortcut.
  • very useful when a is the result of another function so you can do things in one line instead of 3 and a temp variable
  • This will produce different results than the %in% solution if the input vector contains duplicates (in which case setdiff will only return the unique set, i.e. without duplicates)
  • @docendodiscimus: fsetdiff of data.table package has an all flag (default F) that allows to keep duplicates in the input vector.
  • what you're calling a list in your example is a vector, right?
  • Yes I mean the vector. Thanks for the comment.
  • There is no need in which here. It's basically the same as @cbeleites answer.
  • yes it is similar, but different in a few points of view. which returns indexes of TRUE values. So minus sign can be used to say "the indexes other than these indexes". Also which is more readable since it is closer to the natural language.
  • can you please explain your last statement about variables name length? Why you don't like that? Why is better than the other way? Or, remove that paragraph since is not related to the main issue/question.
  • The question specifically says that 2, 3 and 5 are not positions in the vector.
  • what about full_vector[!full_vector %in% searched_vector | duplicated(full_vector)] ?
  • @BenBolker ah I didn't know that "duplicated" predicate :(( now what, shall I delete my answer or change it to show only yours instead?
  • @BenBolker, your solution is wrong; just try: full_vector = c(1,1,1,2,3); searched_vector = c(1,1,3); - that produces 1, 1, 2 instead of the correct answer 1, 2.
  • Just to add a possible, correct solution for repeated values: removeif <- function(from, where) { for (i in where) if (i %in% from) {from = from[-match(i, from)]}; from}