如果其他矩阵的值满足某些条件,我将尝试按矩阵中的元素执行操作。我知道如何通过使用行和列的 for
循环来解决它,但我确信在 R 中有更有效的方法来解决它。我已经尝试过 apply(... ,c(1,2),FUN)
但不知道如何遍历 cond
的元素来检查其值:
m <- matrix(rnorm(9),3,3)
cl <- c('a','b','c')
cond <- matrix(sample(cl,9,replace=T),3,3)
res.m <- apply(m, c(1,2), function(x) if (cond == 'a' ) { x*10 } if (cond == 'b' ) { x*-10 } else { 0 }
最佳答案
这是一个非常简单的方法。使用命名向量来设置您的条件。
首先,这是我正在处理的数据:
set.seed(1)
m <- matrix(rnorm(9),3,3)
cl <- c('a','b','c')
cond <- matrix(sample(cl,9,replace=T),3,3)
m
# [,1] [,2] [,3]
# [1,] -0.6264538 1.5952808 0.4874291
# [2,] 0.1836433 0.3295078 0.7383247
# [3,] -0.8356286 -0.8204684 0.5757814
cond
# [,1] [,2] [,3]
# [1,] "b" "a" "a"
# [2,] "c" "b" "b"
# [3,] "c" "a" "a"
其次,在一个漂亮的紧凑型生产线中的解决方案。
m * c(a = 10, b = -10, c = 0)[cond]
# [,1] [,2] [,3]
# [1,] 6.264538 15.952808 4.874291
# [2,] 0.000000 -3.295078 -7.383247
# [3,] 0.000000 -8.204684 5.757814
基本上,c(a = 10, b = -10, c = 0)[cond]
使用您的“cond”矩阵创建一个向量,您可以使用该向量乘以原始矩阵由。
关于r - 在没有循环 R 的情况下应用于以其他矩阵的值为条件的行和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18653740/