删除列后将列重新排序为初始顺序

Resorting columns to initial ordering after deletion of columns

笨拙的标题,但让我解释一下其中的内容:

我的初始矩阵如下所示:

kitty <- matrix(  
  c(1, 2, 4, 0, 0, 0, 0, 0, 0, 3, 1, 2), 
  nrow=3, 
  ncol=4)

返回:

X1 X2 X3 X4
1  0  0  3
2  0  0  1
4  0  0  2

我删除所有零列

kitty<- kitty[, colSums(kitty != 0) > 0]

因为我必须 运行 矩阵上的一组特定计量经济学产生(这里是完整的随机数字集,重要的是第 2 列和第 3 列不再包含在其中并且我的方法没有请允许我命名列):

kitty2 <- matrix(  
  c(2, 3, 4, 1, 3, 8), 
  nrow=3, 
  ncol=2)

X1 X4
2  1
3  3
4  8

什么是将列重置回初始位置并用 NA 或 0 填充缺失列的有效方法(我有数百个这样的矩阵)?

X1 X2 X3 X4
2  NA NA  1
3  NA NA  3
4  NA NA  8

所以坦率地说,我不太确定这是否特别有效,但这是我能想到的最好的方法:

获取 kitty 的非零索引:

indices <- which(colSums(kitty != 0) > 0)

然后一旦你有 kitty2,用你更改的列的值重新填充 kitty

kitty[,indices] <- kitty2
kitty
         [,1] [,2] [,3] [,4]
   [1,]    2    0    0    1
   [2,]    3    0    0    3
   [3,]    4    0    0    8

然后您可以将列保留为零或将它们更改为 NA

您可以不尝试重新创建已删除的列,而是从一开始就分配 NA 吗?

kitty <- matrix(  
  c(1, 2, 4, 0, 0, 0, 0, 0, 0, 3, 1, 2), 
  nrow=3, 
  ncol=4)
kitty[,!(colSums(kitty) > 0)] <- NA
kitty
#      [,1] [,2] [,3] [,4]
# [1,]    1   NA   NA    3
# [2,]    2   NA   NA    1
# [3,]    4   NA   NA    2