我有很多与此类似的矩阵,但是有数千行:
r <- 10
c <- 2
set.seed(333)
m1 <- matrix(runif(r*c)+1, r, c)
> m1
[,1] [,2]
[1,] 1.467001 1.393902
[2,] 1.084598 1.474218
[3,] 1.973485 1.891222
[4,] 1.571306 1.665011
[5,] 1.020119 1.736832
[6,] 1.723557 1.911469
[7,] 1.609394 1.637850
[8,] 1.306719 1.864651
[9,] 1.063510 1.287575
[10,] 1.305353 1.129959
Run Code Online (Sandbox Code Playgroud)
我有一个循环,告诉我,对于第一列的每个值,第二列中第一个值的索引是多少,该索引高10%像这样:
result <- 1:nrow(m1)
for (i in 1:nrow(m1)){
result[i] <- which(m1[,2]>(1.1*m1[,1][i]))[1]
}
> result
[1] 3 1 NA 3 1 6 3 2 1 2
Run Code Online (Sandbox Code Playgroud)
我的矩阵太多了,要花几个小时,在对我的代码进行性能分析后,迄今为止最大的耗时任务是此循环。根据您的说法,最快的方法是什么?
例如,r = 30000:
start_time <- Sys.time()
for …Run Code Online (Sandbox Code Playgroud) 我想找到矩阵行最大值的列而忽略NA.例如,
set.seed(1)
a <- matrix(runif(15), ncol=3)
a[a<.3] <- NA
a[5,] <- NA
Run Code Online (Sandbox Code Playgroud)
那是:
> a
[,1] [,2] [,3]
[1,] NA 0.898 NA
[2,] 0.372 0.945 NA
[3,] 0.573 0.661 0.687
[4,] 0.908 0.629 0.384
[5,] NA NA NA
Run Code Online (Sandbox Code Playgroud)
可以使用max以下方法获得忽略NA的行最大值:
> apply(a, 1, max, na.rm=T)
[1] 0.898 0.945 0.687 0.908 -Inf
Run Code Online (Sandbox Code Playgroud)
我正在寻找这些最大值的列位置,但max.col仅适用于没有任何NA的行.
> max.col(a, ties.method="first")
[1] NA NA 3 1 NA
Run Code Online (Sandbox Code Playgroud)
如何找到具有一些非缺失值的行的(第一个)最大化列?即,类似于:
[1] 2 2 3 1 NA
Run Code Online (Sandbox Code Playgroud)