Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R recode multiple variables following same rules

Tags:

r

dplyr

recode

data=data.frame("x1"=c(1:10),
                "x2"=c(1:4,4,6:10),
                "x3"=c(1:3,2:5,5:7),
                "x4"=c(21:30),
                "x5"=c(35:44))

recode=c("x1","x2","x3")


data <- data[recode %in% c(4,5)] <- NA

I want to store a specific set of variables for example above I store x1,x2,x3 in 'recode'. Then I want to change all the values for all variables in recode such that any value of 4 or 5 is set to NA.

like image 206
bvowe Avatar asked May 30 '26 01:05

bvowe


1 Answers

We need to use replace with lapply

data[recode] <- lapply(data[recode], function(x) replace(x, x %in% 4:5, NA))
data
#   x1 x2 x3 x4 x5
#1   1  1  1 21 35
#2   2  2  2 22 36
#3   3  3  3 23 37
#4  NA NA  2 24 38
#5  NA NA  3 25 39
#6   6  6 NA 26 40
#7   7  7 NA 27 41
#8   8  8 NA 28 42
#9   9  9  6 29 43
#10 10 10  7 30 44

Or with dplyr

library(dplyr)
data %>%
   mutate_at(vars(recode), ~ na_if(., 4)) %>%
   mutate_at(vars(recode), ~ na_if(., 5))
#   x1 x2 x3 x4 x5
#1   1  1  1 21 35
#2   2  2  2 22 36
#3   3  3  3 23 37
#4  NA NA  2 24 38
#5  NA NA  3 25 39
#6   6  6 NA 26 40
#7   7  7 NA 27 41
#8   8  8 NA 28 42
#9   9  9  6 29 43
#10 10 10  7 30 44
like image 71
akrun Avatar answered Jun 01 '26 21:06

akrun



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!