R语言 如何在不使用max.col的情况下获取行中值等于零的列

svmlkihl  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(95)

我有一个距离矩阵,我想得到零所在行的列索引。
如果没有出现零,我希望该行被指定为NA。
所以我生成了一个距离矩阵的例子。

m <- -replicate(10, sample(0:9, size = 10, replace = FALSE))

这个语句将返回行中出现零的列,但在某些情况下,零不会出现,所以如果是这种情况,我想将NA赋给该行。

max.col(m)

这可能吗?

sq1bmfud

sq1bmfud1#

使用replace

set.seed(42)
(m <- -replicate(10, sample(0:9, size=10, replace=FALSE)))
#       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#  [1,]    0   -7   -8   -2   -4   -5   -9   -3   -5    -3
#  [2,]   -4   -6   -9    0   -3   -1   -7   -8   -1    -8
#  [3,]   -9   -3   -2   -1   -1   -3   -4   -2   -8    -9
#  [4,]   -7    0   -3   -5   -7   -2    0   -7    0    -6
#  [5,]   -1   -4   -4   -9   -2   -9   -6   -4   -7    -1
#  [6,]   -3   -9   -5   -7    0   -4   -3   -5   -4    -5
#  [7,]   -5   -1    0   -3   -9   -8   -5   -9   -9    -2
#  [8,]   -8   -5   -1   -4   -6   -6   -1   -1   -2     0
#  [9,]   -6   -8   -7   -6   -5   -7   -8    0   -3    -7
# [10,]   -2   -2   -6   -8   -8    0   -2   -6   -6    -4

replace(max.col(m), rowSums(m == 0) == 0, NA_integer_)
# [1]  1  4 NA  7 NA  5  3 10  8  6
fslejnso

fslejnso2#

cbind一列零,找到第一个零,然后索引原始矩阵列号(任何大于ncol(m)的值都将返回NA):

(1:ncol(m))[max.col(cbind(m, 0), "f")]
#>  [1]  2  3  4 NA  1  5 NA NA  7 NA

数据:

set.seed(4752401)
m <- -replicate(10, sample(0:9, size = 10, replace = FALSE))

相关问题