我有一个距离矩阵,我想得到零所在行的列索引。如果没有出现零,我希望该行被指定为NA。所以我生成了一个距离矩阵的例子。
m <- -replicate(10, sample(0:9, size = 10, replace = FALSE))
这个语句将返回行中出现零的列,但在某些情况下,零不会出现,所以如果是这种情况,我想将NA赋给该行。
max.col(m)
这可能吗?
sq1bmfud1#
使用replace。
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
fslejnso2#
cbind一列零,找到第一个零,然后索引原始矩阵列号(任何大于ncol(m)的值都将返回NA):
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))
2条答案
按热度按时间sq1bmfud1#
使用
replace
。fslejnso2#
cbind
一列零,找到第一个零,然后索引原始矩阵列号(任何大于ncol(m)
的值都将返回NA
):数据: