r - 在没有循环 R 的情况下应用于以其他矩阵的值为条件的行和列

标签 r apply

如果其他矩阵的值满足某些条件,我将尝试按矩阵中的元素执行操作。我知道如何通过使用行和列的 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/

相关文章:

r - 提取列表中每个元素的第二个子元素,同时忽略 R 中 sapply 中的 NA

r - 使用 for 循环遍历列名向 gt 表添加标签

html - 将显示属性设置为无会删除 href 目标

r - 使用 ggplot 绘制辅助轴

r - 应用到具有多列的 xts

r - R Markdown 中的 Latex 序言

r - CairoPNG 增加了图边距之外的文本大小

function - Matlab:在结构矩阵上应用函数

python - 将具有常量参数的函数应用于 Pandas 数据框