使用另一个逻辑矩阵在矩阵中设置 NA
Setting NA in a matrix using another logical matrix
我刚刚看到一个看起来非常好的问题被删除了,因为像原来的提问者一样我找不到重复的问题,我再次发布。
假设我有一个简单的矩阵 ("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]
returns 向量而不是矩阵。实现这一目标的正确方法是什么?
发帖人发了一条评论说他想出了解决办法,然后几乎马上就删了:
m[ !i ] <- NA
我已经开始使用 is.na<-
函数提供了一个略有不同的解决方案的答案:
is.na(m) <- !i
这两种解决方案似乎都是依赖逻辑索引的合理 R 代码。 (实际上并不依赖 i
矩阵结构。适当长度和条目的向量也将保留 m
的矩阵结构。)
两种解决方案都提供了上述工作并且很好。这是在不修改前一个矩阵的情况下生成新矩阵的另一种解决方案。确保您的逻辑值矩阵以逻辑形式而非字符形式妥善存储。
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))
我刚刚看到一个看起来非常好的问题被删除了,因为像原来的提问者一样我找不到重复的问题,我再次发布。
假设我有一个简单的矩阵 ("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]
returns 向量而不是矩阵。实现这一目标的正确方法是什么?
发帖人发了一条评论说他想出了解决办法,然后几乎马上就删了:
m[ !i ] <- NA
我已经开始使用 is.na<-
函数提供了一个略有不同的解决方案的答案:
is.na(m) <- !i
这两种解决方案似乎都是依赖逻辑索引的合理 R 代码。 (实际上并不依赖 i
矩阵结构。适当长度和条目的向量也将保留 m
的矩阵结构。)
两种解决方案都提供了上述工作并且很好。这是在不修改前一个矩阵的情况下生成新矩阵的另一种解决方案。确保您的逻辑值矩阵以逻辑形式而非字符形式妥善存储。
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))