使用数据和零的列构造矩阵,而不使用for循环

时间:2016-11-15 20:26:53

标签: r matrix

我有一个数字数据矩阵,我想删除一些零列,以进行一些数据处理。我通过is_zero_column <- colSums(matrix) == 0跟踪哪些列为零列,并通过matrix <- matrix[,colSums(matrix)!=0]

删除零列

现在我该如何反向,我使用is_zero_column TRUE / FALSE(如果为零列,则为TRUE)将零列重新插入到我的矩阵中?

如果这不是R,我会去构建一个新矩阵的forloop :(在python-ish伪代码中)

new_matrix;
for i in is_zero_column:
  if i is TRUE:
    new_matrix <- new_matrix.append_column(rep(0, columnlength))
  else:
    new_matrix <- new_matrix.append_column(matrix[,1])
    matrix <- matrix[,-1]
return new_matrix;

但是,这是R,所以试图找到一种非循环方式来做到这一点。

1 个答案:

答案 0 :(得分:2)

假设Q是没有零列的矩阵:

Q
#     [,1] [,2]
#[1,]    1    0
#[2,]    0    0
#[3,]    0    1

is_zero_column如下:

is_zero_column = c(F,T,F)

您可以创建一个零矩阵,其行数等于Q中的行数,列数等于is_zero_column向量的长度,然后使用Q中的值更新非零列值:

Q1 = matrix(0, nrow(Q), length(is_zero_column))
Q1[, !is_zero_column] = Q
Q1
#     [,1] [,2] [,3]
#[1,]    1    0    0
#[2,]    0    0    0
#[3,]    0    0    1