Векторизованный подход (должен быть максимально быстрым):
mat <- matrix(c(letters[1:11], 1,1,1,2,2,3,3,3,4,4,4), ncol = 2)
colnames(mat) <- c("A", "B")
rownames(mat) <- 1:11
> mat
A B
1 "a" "1"
2 "b" "1"
3 "c" "1"
4 "d" "2"
5 "e" "2"
6 "f" "3"
7 "g" "3"
8 "h" "3"
9 "i" "4"
10 "j" "4"
11 "k" "4"
mat[, "B"] <- mat[as.numeric(mat[, "B"]), "A"]
> mat
A B
1 "a" "a"
2 "b" "a"
3 "c" "a"
4 "d" "b"
5 "e" "b"
6 "f" "c"
7 "g" "c"
8 "h" "c"
9 "i" "d"
10 "j" "d"
11 "k" "d"
Или вы можете использовать sapply
:
mat[, "B"] <- sapply(mat[, "B"], function(x) mat[as.numeric(x), "A"])
Редактировать: я поместил векторизованное решение вверху, так как это явно более быстрый (или даже самый быстрый?) Подход.