我想在矩阵的每个元素中设置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”循环来做我想要的,但是有一种基于矢量的方法来做到这一点吗?
谢谢你的任何提示 .
2 回答
你可以这样做:
这是获得预期输出的一个选项 . 我们得到一个逻辑矩阵(
zz >= xx)
,使用NA^
,返回NA表示TRUE值,1表示FALSE,然后将其与原始矩阵'zz'相乘,这样NA保持不变,而1变为'zz'中的相应值 .或者另一种选择是
ifelse
数据