R - 根据每行的函数获取矩阵的列索引

2024-03-13

> set.seed(2014)
> m<-matrix(sample(10,16,replace=TRUE),nrow=4)
> m
     [,1] [,2] [,3] [,4]
[1,]    3    6    1    7
[2,]    2    1    2    6
[3,]    7   10    7    7
[4,]    4    7    1    5

对于每一行,我想检索该行中第一个元素的索引,该索引大于或等于最后一个元素,否则为 NA 。因此,对于第 1 行,前三列中没有>=7 的元素,因此应返回 NA。对于第 3 行,第一个元素 >=7,因此应返回 1。

结果应该是长度为 4 的向量,等于 (NA, NA, 1, 2)

我认为解决方案可能涉及应用,但我不知道如何正确解决。另外,请记住效率,因为我的真实矩阵可能有数百万行。

Thanks


这是一种可能性——不过,它可能会使用大量空间来存储临时结果。

set.seed(2014)
m <- matrix(sample(10,16,replace=TRUE),nrow=4)
m2 <- sweep(m,1,m[,ncol(m)],">=")
v <- apply(m2,1,function(x) which(x)[1])
ifelse(v==ncol(m),NA,v)

基于 Rcpp 的解决方案仅在需要时迭代每一行,这样会更快(如果有人编写了一个通用的、快速的解决方案,那就太好了)which.first()功能 ...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R - 根据每行的函数获取矩阵的列索引 的相关文章

随机推荐