[R] Faster way to transform vector [3 8 4 6 1 5] to [2 6 3 5 1 4]
arun
smartpink111 at yahoo.com
Sat Apr 26 17:20:54 CEST 2014
Hi,
Perhaps,
rank(bo)
#[1] 2 6 3 5 1 4
A.K.
On Saturday, April 26, 2014 11:00 AM, "xmliu1988 at gmail.com" <xmliu1988 at gmail.com> wrote:
Hi,
could anybody help me to find a fast way to fix the following question?
Given a verctor of length N, for example bo = [3 8 4 6 1 5],
I want to drive a vector whose elements are 1, 2, ..., N and the order of elements is the same as that in verctor bo.
In this example, the result is supposed to be bt = [2 6 3 5 1 4].
I used the following code to solove this:
bo <- c(3, 8, 4, 6, 1, 5)
N <- length(bo)
bt <- rep(0, N)
M <- max(bo)
temp <- bo
for(i in 1 : N)
{
min <- M
i_min <- 0
for(j in 1 : N)
{
if(min >= temp[j])
{
min <- temp[j]
i_min <-j
}
}
bt[i_min] <- i
temp[i_min] <- M+ 1
}
> bt
[1] 2 6 3 5 1 4
However, the time complexity is O(N2).
When N is larger than 1000000, it takes too much time.
Is there any faster way to fix it?
best
Xueming
xmliu1988 at gmail.com
[[alternative HTML version deleted]]
______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list