R перекодировать несколько переменных, следуя тем же правилам - PullRequest
2 голосов
/ 02 октября 2019
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

Я хочу сохранить определенный набор переменных, например, выше. Я сохраняю x1, x2, x3 в 'recode'. Затем я хочу изменить все значения для всех переменных в перекодировке так, чтобы любое значение 4 или 5 было установлено на NA.

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Одна dplyr возможность может быть:

data %>%
 mutate_at(vars(recode), ~ replace(., . %in% 4:5, NA))

   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 NA 24 38
5  NA NA NA 25 39
6   6  6  4 26 40
7   7  7  5 27 41
8   8  8  5 28 42
9   9  9  6 29 43
10 10 10  7 30 44
0 голосов
/ 02 октября 2019

Использование Map().

data[recode] <- Map(function(x) ifelse(x %in% c(4, 5), NA, x), data[recode])
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
...