使用另一个逻辑矩阵在矩阵中设置NA

时间:2016-01-05 17:03:38

标签: r indexing na

我刚刚看到了一个被删除的好问题,因为像原始提问者一样,我找不到重复的内容,我会再次发帖。

假设我有一个简单的矩阵(" m"),我想用另一个逻辑矩阵(" i")进行索引,保持原始矩阵结构不变。像这样:

# original matrix
m <- matrix(1:12, nrow = 3, ncol = 4)

# logical matrix
i <- matrix(c(rep(FALSE, 6), rep(TRUE, 6)), nrow = 3, ncol = 4)

m
i

# Desired output:
matrix(c(rep(NA,6), m[i]), nrow(m), ncol(m))
# however this seems bad programming...

使用m[i]返回向量而不是矩阵。实现这一目标的正确方法是什么?

2 个答案:

答案 0 :(得分:8)

原始海报添加了评论说他已经找到了解决方案,然后几乎立即删除了它:

 m[ !i ] <- NA 

我已经开始使用is.na<-函数提供了一个稍微不同的解决方案的答案:

 is.na(m) <- !i

这两种解决方案似乎都是合理的R代码,它依赖于逻辑索引。 (实际上并不依赖i矩阵结构。适当长度和条目的向量也将保留m的矩阵结构。)

答案 1 :(得分:0)

这两种解决方案都可以完成上述工作,并且效果很好。这是产生新矩阵而不修改前一个矩阵的另一种解决方案。确保逻辑值矩阵正确存储为逻辑而不是字符。

vm <- as.vector(m)
vi <- as.vector(i)
new_v <- ifelse(vi, vm, NA)
new_mat <- matrix(new_v, nrow = nrow(m), ncol=ncol(m))