笨拙的头衔,但让我解释其中的内容:
我的初始矩阵看起来像这样:
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
答案 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