2011-11-12 84 views
3

讓我們考慮一個數值「x」的向量。有些值可能是重複的。我需要逐個刪除最大值,直到x爲空。如何刪除R中的向量中的重複值的唯一實例?

問題,如果我使用:

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

它刪除等於最大所有重複。我只想刪除其中一個副本。所以到現在爲止,我做的:

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 howcome 4 spaces不會導致代碼着色?

+0

超簡單卡爾,我認爲你的回答比我的好。 –