Вот подход, использующий dplyr, изменяющий все 998
и 999
во всех столбцах кадра данных на -999
. Предполагается, что 998
и 999
не используются как «нормальные» числа в данных, а только для указания пропущенных значений. Но это обычно относится к данным опроса.
# These libraries is needed
library(dplyr)
library(car) # not necessary to call, but has to be installed
# Some test data
data <- data.frame(a = c(1:10, 998),
b = c(21:31),
c = c(999,31:40))
# a predicate function which checks if a column x contains 998 or 999
check_998_999 <- function (x) {
any(x == 998) | any(x == 999)
}
# change all columns with 998 or 999 so that they become -999
data %>%
mutate_if(check_998_999,
~ car::recode(.x, "c(998,999) = -999"))
Я предпочитаю от car::recode
до dplyr::recode
, потому что вам нужно быть менее конкретным, и вы можете перекодировать элементы другого класса. Например, вышеприведенное даже работает, когда столбец является символом.
data <- data.frame(a = c(1:10, 998),
b = c(21:31),
c = c("999",letters[1:10]),
stringsAsFactors = F)
data %>%
mutate_if(check_998_999,
~ car::recode(.x, "c(998,999) = -999"))