r - 设置矩阵值与 R 中的向量比较

标签 r matrix vector subset

我想在矩阵的每个元素中设置 NA,其中列中的值大于或等于给定向量的值。例如,我可以创建一个矩阵:

set.seed(1)
zz <- matrix(data = round(10L * runif(12)), nrow = 4, ncol = 3)

这给出了 zz:
     [,1] [,2] [,3]
[1,]    8    5    7
[2,]    6    5    1
[3,]    5   10    3
[4,]    9    1    9

对于比较向量(例如):
xx <- round(10L * runif(4))

其中 xx 是:
[1] 6 3 8 2

如果我执行此操作:
apply(zz,2,function(x) x >= xx)

我得到:
      [,1]  [,2]  [,3]
[1,]  TRUE FALSE  TRUE
[2,]  TRUE  TRUE FALSE
[3,] FALSE  TRUE FALSE
[4,]  TRUE FALSE  TRUE

我想要的是在我有一个 TRUE 元素的任何地方我想要一个 NA 并且在我有一个 FALSE 的任何地方我都得到 zz 矩阵中的数字(例如,手动...):
NA  5  NA
NA  NA 1
5   NA 3
NA  1  NA

我可以拼凑一些“for”循环来做我想做的事,但是有没有基于向量的方法来做到这一点?

感谢您提供任何提示。

最佳答案

这是获得预期输出的一种选择。我们得到一个逻辑矩阵( zz >= xx) ,使用 NA^ 返回 NA 为真值和 1 为假值,然后将其与原始矩阵 'zz' 相乘,以便 NA 保持原样,而 1 更改为相应的'zz' 中的值。

NA^(zz >= xx)*zz
#     [,1] [,2] [,3]
#[1,]   NA    5   NA
#[2,]   NA   NA    1
#[3,]    5   NA    3
#[4,]   NA    1   NA

或者另一个选项是 ifelse
ifelse(zz >= xx, NA, zz)

数据
zz <- structure(c(8, 6, 5, 9, 5, 5, 10, 1, 7, 1, 3, 9), .Dim = c(4L, 3L))
xx <- c(6, 3, 8, 2)

关于r - 设置矩阵值与 R 中的向量比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39597027/

相关文章:

c++ - 如何正确删除多维 vector ?

r - 绘制李克特量表问题并将它们分组

r - 需要 PVF 包的示例数据(光伏和太阳预报)

r - 用于 R 中两个数据集之间计算的 for 循环矢量化

java - 查找相同值的4个连续数字-垂直和对角线

java - Java 矩阵的异常

c++ 编译错误 "required from ' _InputIterator std::__find_if(_InputIterator, _InputIterator, _Predicate, std::input_iterator_tag) "

arrays - 我们如何将向量添加到矩阵的单列?

R:当每行末尾未分隔时读取分隔表

c++ - 为什么在 OpenGL 中显式管理矩阵更好?