在删除列之后将列调整为初始排序

时间:2018-01-19 17:18:06

标签: r matrix data-management

笨拙的头衔,但让我解释其中的内容:

我的初始矩阵看起来像这样:

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

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

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

2 个答案:

答案 0 :(得分:1)

坦率地说,我不太确定这是特别有效的,但这是我能想到的最佳方式:

抓取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

答案 1 :(得分:1)

您可以从一开始就指定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