4

次のような整数のベクトルがあるとします。

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

ベクトルを整数1から一意の要素数の最大値に再スケーリングするRの効率的な方法を探しています。したがって、結果のベクトルは次のようになります。

1 1 1 2 2 3 3 4

単純な問題のようですが、効率的な方法を見つけるのに苦労しています。実際には、このベクトルは大きくなります(約500)。

4

2 に答える 2

7

試してください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
于 2012-11-17T20:11:12.743 に答える
6

vそれがあなたのベクトルであると仮定して、次のコマンドを試してください

rank( v )

詳細については、を参照?rankしてください。

まあ、これは別の結果をもたらしますが、あなたが達成したいと思っていたランキングとしては正しいです. 好みの結果を得るには、次のようにします。

as.integer( factor( v ) )
于 2012-11-17T19:52:42.730 に答える