我在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?
答案 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)