从R中的数组中检索非零值

时间:2018-01-13 22:32:37

标签: r matrix

我在R中有一个大小为31x36的数组,名为input_matrix。在该矩阵的每一行中,存在16个非零值和20个零值。每行的非零值和零值的索引是不同的。我想检索我的系统的最终输出矩阵output_matrix,其大小为31x16,其中包含唯一的非零值。一行例子,如果我有:

5 0 4 0 4 0 1 0 0 0 .. 1

我想要检索:(5 4 4 1 ... 1)。我怎么能在R?

这样做

1 个答案:

答案 0 :(得分:1)

reproducible example开头总是好的。所以这是一个:

# Create a matrix per the description
# fill first with random integers
input_matrix <- matrix(sample(1:9, size = 31L*36L, replace = TRUE), nrow = 31)
# Now add 20 zero value to each row randomly
for (i in 1:nrow(input_matrix)) {
  input_matrix[i, sample(1:36, size = 20)] <- 0L
} 

解决方案1 ​​

t(apply(input_matrix, 1, function(x) x[x != 0]))

解决方案2 (简化版)

matrix(t(input_matrix)[t(input_matrix) != 0], nrow = 31, byrow = TRUE)