r - 在 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 按列重新排序?我会很感激任何意见。我确信这是一个简单的解决方法——我只是不知道是哪个。
谢谢!
解决方案
在矩阵与向量之间进行转换时,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
推荐阅读
- java - 按每个单词查找文本文件的行号
- mysql - 如何在 QueryDef 中重新定义 SQL?我有通过删除和重新创建 QueryDef 来工作的代码,但我无法让覆盖工作
- php - 比较来自不同查询的两个值
- sql-server - 对列进行 GROUP BY 以删除空值
- html - 如何使用 Angular 在我的 HTML 中使我的插值绑定变为粗体?
- javascript - 当我使用 document.getElementById (Jest+Enzyme) 时反应测试失败
- c# - 带有hangupOnStar的Twilio Dial动词,在没有按下星号的情况下触发动作?
- python - Python tarfile 压缩内存中的对象
- mysql - 使用 mysql 进行循环比赛
- javascript - Recursive function to find top level parent given an id