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.
Another simpler option is to do:
The
ifelse
function would be a quick and easy way to do this.For factor or character vectors, we can use
revalue
fromplyr
:This has the advantage of only specifying the input vector once, so we can use a pipe like
Perhaps
replace
is what you are looking for:Or, if you don't have
x
(any specific reason why not?):Many people are familiar with
gsub
, so you can also try either of the following:Update
After reading the comments, perhaps
with
is an option:To replace more than one number:
Edit:
for a continous series, you can do this
vec <- c(1:10); replace(vec, vec %in% c(2,6), c(0,9))
but forvec <- c(1:10,2,2,2); replace(vec, vec %in% c(2,6), 0)
we can replace multiple values with one value.