2011-11-12 9 views
3

数値「x」のベクトルを考えてみましょう。一部の値は重複する場合があります。 xが空になるまで、最大値を1つずつ削除する必要があります。Rのベクトルの重複値のインスタンスを1つだけ削除する方法はありますか?

問題は、私が使用している場合:

x <- x[x != max(x)] 

それは最大値に等しいすべての重複を削除します。私は重複の1つだけを削除したい。だから今まで、私が行います

max.x <- x[x == max(x)] 
max.x <- max.x[1:length(max.x) - 1] 
x <- c(x[x != max(x)], max.x) 

しかし、これははるかに計算効率からである、と私はこれを行うには正しい方法を見つけるためにRで十分ではありませんよ。誰かが良いトリックを持っていますか?

おかげ

答えて

1

あなたの問題の範囲が何であるかを完全には明らかではないですので、私はちょうどそれが頭に浮かぶ私が持っている最初の提案を与えるでしょう。 sort関数を使用して値のリストを降順で取得します。

sorted <- sort(x,decreasing=TRUE,index.return=TRUE)

あなたは今繰り返しxから最高のアイテムを削除することができます。あなたのサブセットデータにsort関数を何度も繰り返し使用することは非効率的です。xの永久コピーを保存し、可能であればそれから削除してください。

このアプローチ

# random set of data with duplicates 
x <- floor(runif(50)*15) 
# sort with index.return returns a sorted x in sorted$x and the 
# indices of the sorted values from the original x in sorted$ix 
sorted <- sort(x,decreasing=TRUE,index.return=TRUE) 

for(i in 1:length(x)) 
{ 
# remove data from x 
newX <- x[-sorted$ix[1:i]] 
print(sort(newX,decreasing=TRUE)) 
} 
+0

ありがとうございます。これはちょっとしたことです...コンテキストの場合、データセットの統計を実行して、極端な値(最大値と最小値も削除します)を徐々に切り捨てます。 – Seb

0

私はあなたの質問を理解する方法を検討し、

?unique 

は何をしたいあなたを与えるかもしれません。

RGDS、 ライナー楽しみのためだけに

2


X < - X [-which.max(X)]

リンス、泡立ち、繰り返し。

dagnabitどのように4つのスペースがコードの色付けを引き起こしていませんか?

+0

非常に単純なカール、私はあなたが答えが私より優れていると思います。 –

関連する問題