我有一个数字数据矩阵,我想删除一些零列,以进行一些数据处理。我通过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,所以试图找到一种非循环方式来做到这一点。
答案 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