r - 如何根据逻辑从数值矩阵生成向量或因子(无 for 循环)

标签 r vector matrix

我有一个 30,000 行 3 列的数字矩阵。我想根据矩阵每行中的 3 个值生成一个简单的通过/失败向量(或因子)。我想应用以下逻辑:

如果行中的所有 3 个值都 > 3,则输入 PASS,否则输入 FAIL。

我知道如何使用 for 循环来做到这一点,但是我怎样才能做得更快呢?我有几十个这样的矩阵...谢谢!

as.matrix(rbind(c(129,129,120),c(135,97,96),c(0,0,0),c(39,4,2)))

期望的输出: 通过,通过,失败,失败

最佳答案

使用allapply(尽管apply使用它自己的循环)。

m <- as.matrix(rbind(c(129,129,120),c(135,97,96),c(0,0,0),c(39,4,2)))

apply(m, 1, function(x) all(x > 3))
# [1]  TRUE  TRUE FALSE FALSE

如果您确实想要“PASS”和“FAIL”,您可以factor apply 步骤的结果。

factor(apply(m, 1, function(x) all(x > 3)), 
       levels = c(FALSE, TRUE), 
       labels = c("FAIL", "PASS"))
# [1] PASS PASS FAIL FAIL
# Levels: FAIL PASS
<小时/>

稍微扩展 Codoremifa 的答案,类似的方法适用于 data.table,特别是当您指定想要一个向量或因子作为输出时。

library(data.table)
DT <- data.table(m)
DT[, all(.SD > 3), by = 1:nrow(DT)][, factor(V1, labels = c("FAIL", "PASS"))]
# [1] PASS PASS FAIL FAIL
# Levels: FAIL PASS

关于r - 如何根据逻辑从数值矩阵生成向量或因子(无 for 循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19525065/

相关文章:

vector - 在ffmpeg H.264解码器中修改运动向量

r - xpath应用: How to pass multiple paths or nodes?

r - R 中的多项 Logit 选择模型与 mnlogit()

r - 在 Rcpp 中构建 3D 数组

python - 当移动物体偏离路径特定幅度时如何发出警告?

c++ - 使用 Boost Ublas lu_Factorize 时出错

r - 我可以调整 scale_color_brewer 的下限吗?

c++ - 遍历 vector 列 C++

python - 具有多个 cmap 的 matplotlib 热图

arrays - 如何根据 MA​​TLAB 中的时间合并数据集?