首页 > 解决方案 > R - 使用其他矩阵中的过滤器获取矩阵的值

问题描述

我有以下类型的矩阵:

c1 c2 c3 c4
1234 123 124 134
234 23 14 124
1234 123 124 134
234 23 14 124

我有另一个矩阵,它告诉我什么是正常的单元格:

c1 c2 c3 c4
1 1 1 1
1 0 1 1
0 0 1 1
0 1 0 1

我想获取表 1 中前 2 列的值,表 2 中的值为 1:

c1 c2
1234 123
234 14
124 134
23 124

我可以用 for lop and head 解决它,但有更好的方法吗?

标签: rmatrix

解决方案


您可以覆盖非1withNA并使用applywith head

x[y!=1] <- NA
t(apply(x, 1, function(z) head(z[!is.na(z)], 2)))
#     [,1] [,2]
#[1,] 1234  123
#[2,]  234   14
#[3,]  124  134
#[4,]   23  124

数据:

x <- as.matrix(read.table(header=TRUE, text="c1     c2  c3  c4
1234    123     124     134
234     23  14  124
1234    123     124     134
234     23  14  124"))

y <- as.matrix(read.table(header=TRUE, text="c1     c2  c3  c4
1   1   1   1
1   0   1   1
0   0   1   1
0   1   0   1"))

推荐阅读