R 使用模式更改矩阵中的多个值
我的输入矩阵R 使用模式更改矩阵中的多个值,r,R,我的输入矩阵 set.seed(123) m1 <- matrix(sample(letters, 50, replace=TRUE), 5) 这是不正确的。使用一个简单的循环: 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
set.seed(123)
m1 <- matrix(sample(letters, 50, replace=TRUE), 5)
这是不正确的。使用一个简单的
循环:
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"
对于(1:4中的i)m1[m1%以%字母表示[seq(i,26,by=4)]]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”
这里有一种使用模块运算的方法:
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"
@马修普劳德:哎呀,我必须在没有重置种子的情况下运行原始矩阵生成行两次。现在已修复。@hadley确实是,一个没有。也许可以稍微解压一下这一个的详细信息(特别是匹配的和%%
部分)。但除此之外+1.+1,有点短了。m1[]
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"