首页 > 解决方案 > 在 R 中使用布尔矩阵进行索引

问题描述

我很难在 R 中使用索引。我有两个矩阵,一个带有逻辑值,一个带有数据。我想用第一个索引到第二个。但是,我注意到 R 在这样做时会重新排序我的值。

我的数据大致如下:

ind <- matrix(c(TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE), nrow = 3, ncol = 4, byrow = TRUE)

data <- matrix(c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4), nrow = 3, ncol = 4, byrow = TRUE)

现在,在编制索引时result <- data[ind],我获得了以下信息:c(1, 3, 4)当我试图获得c(1, 4, 3).

如何防止 R 按列重新排序?我会很感激任何意见。我确信这是一个简单的解决方法——我只是不知道是哪个。

谢谢!

标签: rindexingbooleanbase

解决方案


在矩阵与向量之间进行转换时,R 会按列进行转换。

as.vector(data) 
 [1] 1 1 1 2 2 2 3 3 3 4 4 4

由于这发生在您ind和您的身上,data这通常不是问题。

因此,要保留您的订单,您必须转置两个矩阵:

> t(data)[t(ind)]
[1] 1 4 3

PS:你试过which矩阵吗?

> which(arr.ind = T, ind)
     row col
[1,]   1   1
[2,]   3   3
[3,]   2   4

推荐阅读