2012-01-22 39 views
2

我試圖做出一個函數來確定數據幀的列中的值是否爲新的高。因此,舉例來說,如果我有以下數據:測量數據幀中以前所有值的最大值

x <- rnorm(10,100,sd=5) 
x <- data.frame(x) 

我怎樣才能返回,TRUE或新列,只有考慮了所有以前的值FALSE。結果表看起來是這樣的:

  x new.max 
1 102.42810 NA 
2 109.22762 TRUE 
3 101.97970 FALSE 
4 101.49303 FALSE 
5 93.30595 FALSE 
6 96.77199 FALSE 
7 110.96441 TRUE 
8 96.27485 FALSE 
9 101.77163 FALSE 
10 100.78992 FALSE 

如果我嘗試

x$new.max <- ifelse (x$x == max(x$x) , TRUE, FALSE) 

結果表是以下的,因爲它計算整個列的最大值,而不是以前的所有值的子集。

  x new.max 
1 102.42810 FALSE 
2 109.22762 FALSE 
3 101.97970 FALSE 
4 101.49303 FALSE 
5 93.30595 FALSE 
6 96.77199 FALSE 
7 110.96441 TRUE 
8 96.27485 FALSE 
9 101.77163 FALSE 
10 100.78992 FALSE 

回答

4

有一個內置的函數,計算運行最大值,稱爲cummax()

diff(cummax(x))在達到新的最大值的位置(在x的第一個元素中沒有條目,這總是一個新的最大值)將不爲零。

把拼在一起:

new.max <- c(TRUE, diff(cummax(x)) > 0) 

我設置的第一個元素TRUE,但它也可以同樣是NA

+0

哇,謝謝。我喜歡在R中學習功能,我從來沒有新的東西。 – Kevin

相關問題