Мы можем сделать за один шаг с
replace(cbind( c(-1, 1)[(x==1) + 1], c(-1, 1)[(x==2) + 1] ), x == 3, -1)
# [,1] [,2]
# [1,] -1 -1
# [2,] -1 -1
# [3,] 1 -1
# [4,] -1 1
# [5,] -1 -1
# [6,] 1 -1
# [7,] -1 1
# [8,] 1 -1
# [9,] -1 -1
#[10,] 1 -1
#[11,] -1 -1
#[12,] 1 -1
#[13,] -1 -1
#[14,] -1 1
#[15,] 1 -1
#[16,] 1 -1
#[17,] -1 -1
#[18,] 1 -1
#[19,] -1 -1
#[20,] -1 1
Поскольку некоторые шаги похожи, можно создать функцию
f1 <- function(vec, v) c(-1, 1)[(vec == v) + 1]
replace(cbind(f1(x, 1), f1(x, 2)), x == 3, -1)
data
x <- c(3, 3, 1, 2, 3, 1, 2, 1, 3, 1, 3, 1, 3, 2, 1, 1, 3, 1, 3, 2)