Допустим, у нас есть следующий фрейм данных:
data1 <- data.frame(S1 = sample(c("A", "B", "C"), size = 20, replace = TRUE),
S2 = sample(c("A", "B", "C"), size = 20, replace = TRUE),
number = rnorm(20, 10, 100))
Также есть эта переменная:
scenario <- "scenario1" # can take one of thre values: 'scenario1', 'scenario2', 'scenario3'
Есть также следующие сопоставления. Обратите внимание, что имена уровней в разных сценариях не могут обрабатываться автоматически, например, с регулярным выражением:
changer_1 <- c("A"="a1", "B"="b1", "C"="c1")
changer_2 <- c("A"="something", "B"="completely", "c"="different")
changer_3 <- c("A"="z2", "B"="d3", "c"="p14")
Я хочу переименовать уровни факторов на основе значения (условия) scenario
. До сих пор я придумал довольно примитивный блок if/else
, который проверяет условие и затем использует один из changer
s:
if(scenario=="scenario1"){
data1$S1 <- revalue(data1$S1, changer_1)
data1$S2 <- revalue(data1$S2, changer_1)
} else if (scenario=='scenario2'){
data1$S1 <- revalue(data1$S1, changer_2)
data1$S2 <- revalue(data1$S2, changer_2)
} else {
data1$S1 <- revalue(data1$S1, changer_3)
data1$S2 <- revalue(data1$S2, changer_3)
}
Интересно, есть ли другой (более R-подобный) способ сделать это?