I'm looking for a function which will replace all occurrences of one value with another value. For example I'd like to replace all zeros with ones. I don't want to have to store the result in a variable, but want to be able to use the vector anonymously as part of a larger expression.
I know how to write a suitable function myself:
> vrepl <- function(haystack, needle, replacement) { + haystack[haystack == needle] <- replacement + return(haystack) + } > > vrepl(c(3, 2, 1, 0, 4, 0), 0, 1) [1] 3 2 1 1 4 1
But I'm wondering whether there is some standard function to do this job, preferrably from the base
package, as an alternative from some other commonly used package. I believe that using such a standard will likely make my code more readable, and I won't have to redefine that function wherever I need it.
Perhaps replace
is what you are looking for:
> x = c(3, 2, 1, 0, 4, 0) > replace(x, x==0, 1) [1] 3 2 1 1 4 1
Or, if you don't have x
(any specific reason why not?):
replace(c(3, 2, 1, 0, 4, 0), c(3, 2, 1, 0, 4, 0)==0, 1)
Many people are familiar with gsub
, so you can also try either of the following:
as.numeric(gsub(0, 1, x)) as.numeric(gsub(0, 1, c(3, 2, 1, 0, 4, 0)))
After reading the comments, perhaps with
is an option:
with(data.frame(x = c(3, 2, 1, 0, 4, 0)), replace(x, x == 0, 1))
Another simpler option is to do:
> x = c(1, 1, 2, 4, 5, 2, 1, 3, 2) > x[x==1] <- 0 > x [1] 0 0 2 4 5 2 0 3 2
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With