我刚刚看到了一个被删除的好问题,因为像原始提问者一样,我找不到重复的内容,我会再次发帖。
假设我有一个简单的矩阵(" 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]
返回向量而不是矩阵。实现这一目标的正确方法是什么?
答案 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))