首页 > 解决方案 > 用于创建具有较小值的矩阵的 R 代码

问题描述

我刚刚学习 R,我得到了一个关于使用 apply 和 all 创建一个包含所有值小于 6 的列的矩阵的任务。

所以这是矩阵输出的代码

A<-matrix(c(1, 5, 5, 0, 5, 6, 3, 0, 3), nrow = 3, ncol = 3, byrow = TRUE, 
         dimnames = list(c("Row-1", "Row-2", "Row-3"), 
                         c("Column 1", "Column 2", "Column 3")))

但是,那么我将如何调用 6 中更小的值 Then function apply 我使用如下

apply(A, 2, A<6)

标签: r

解决方案


这是一个没有apply.

A[, colSums(A < 6) == nrow(A)]
#      Column 1 Column 2
#Row-1        1        5
#Row-2        0        5
#Row-3        3        0

解释

第一步是创建一个分配TRUE给所有值 < 6的逻辑矩阵

A < 6
#      Column 1 Column 2 Column 3
#Row-1     TRUE     TRUE     TRUE
#Row-2     TRUE     TRUE    FALSE
#Row-3     TRUE     TRUE     TRUE

我们使用这个矩阵并计算每一列的总和(TRUE等于 1,FALSE等于 0)。这将返回一个命名向量。

colSums(A < 6)
#Column 1 Column 2 Column 3 
#       3        3        2

您正在寻找所有值都小于 6 的列,因此我们需要检查每列中的总和是否等于矩阵的行数。

colSums(A < 6) == nrow(A)
#Column 1 Column 2 Column 3 
#    TRUE     TRUE    FALSE

然后使用此逻辑向量对您的列进行子集化。

A[, colSums(A < 6) == nrow(A)]

推荐阅读