Reputation:
My input matrix
set.seed(123)
m1 <- matrix(sample(letters, 50, replace=TRUE), 5)
Here, I wanted to replace letters with "A", "B", "C", "D" by following a pattern of 4 letter difference. i.e. "A" should replace letters "a", "e", "i", "m", "q", "u", "y", "B" replace "b", "f", "j",....etc.
I tried
replace(m1, c("a","e","i","m","q", "u", "y"), "A")
which is not correct.
Upvotes: 2
Views: 55
Reputation: 44555
Use a simple for
-loop:
for(i in 1:4) m1[m1 %in% letters[seq(i,26,by=4)]] <- LETTERS[i]
> m1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] "D" "B" "A" "D" "D" "C" "B" "A" "D" "D"
[2,] "A" "B" "D" "C" "C" "C" "D" "D" "C" "C"
[3,] "C" "D" "B" "B" "A" "D" "B" "B" "C" "A"
[4,] "C" "C" "C" "A" "B" "D" "A" "A" "B" "C"
[5,] "A" "D" "C" "A" "B" "D" "A" "C" "D" "C"
Upvotes: 2
Reputation: 44614
Here's a way using modular arithmetic:
matrix(toupper(letters)[((match(m1, letters) - 1) %% 4) + 1], ncol=ncol(m1))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] "D" "B" "A" "D" "D" "C" "B" "A" "D" "D"
# [2,] "A" "B" "D" "C" "C" "C" "D" "D" "C" "C"
# [3,] "C" "D" "B" "B" "A" "D" "B" "B" "C" "A"
# [4,] "C" "C" "C" "A" "B" "D" "A" "A" "B" "C"
# [5,] "A" "D" "C" "A" "B" "D" "A" "C" "D" "C"
Upvotes: 3