2012-11-17 59 views
3

假設我有整數如一個矢量:重縮放矢量R

> x 
[1] 1 1 1 4 4 13 13 14 

我尋找中的R的有效方式的矢量爲整數1重新縮放爲元素的唯一編號的最大值。因此得到的載體將是:

1 1 1 2 2 3 3 4 

似乎是一個簡單的問題,但我無法找到一個有效的方式來做到這一點。在實踐中,這個向量很大(大約500)。

回答

6

嘗試match(x, sort(unique(x)))

x <- sample(1:50, 1e6, replace = TRUE) 
benchmark(as.integer(factor(x)), match(x, sort(unique(x))), 
      replications = 20, columns = c("test", "elapsed", "relative")) 
#      test elapsed relative 
# 1  as.integer(factor(x)) 18.44 10.36 
# 2 match(x, sort(unique(x))) 1.78  1.00 

identical(as.integer(factor(x)), match(x, sort(unique(x)))) 
# [1] TRUE 
+0

+1用於基準化替代方法 –

6

試試下面的命令,假設v是您的載體

rank(v) 

看到?rank以獲取更多信息。

那麼,這確實給出了另一個結果,但排名正確,這是我認爲你想實現的。爲了讓您的首選結果,做

as.integer(factor(v)) 
+0

其實這比返回'1 1 1 2 2 3 3 4' – Julius

+0

不同的結果看到更新。 – January