簡體   English   中英

R - 尋找多個最大值

[英]R - Finding muliple max values

我有以下示例數據集

 Time <- c(1,2,3,4,5,6,7,8,9,10,11,12)
 Value <- c(0,1,2,3,2,1,2,3,2,1,2,3)

 Data <- data.frame(Time, Value)

我想自動找到 Value 列的每個最大值,並創建一個僅包含 Value 和相關時間的新數據框。 在此示例中,最大值每四個時間間隔出現一次。 我想將數據分組到箱中並找到相關的最大值。

出於說明目的,我將示例保持簡單,但是請記住:

  1. 我的數據集中的每個最大值都會不同
  2. 不保證每個最大值以相等的時間間隔出現,而是我可以保證每個最大值將出現在時間值的范圍(即 bin)內。

感謝您在此過程中提供的任何幫助!

您可以通過查找Value列的diff signdiff為負的點來找到局部最大值。

Data[which(diff(sign(diff(Data$Value))) < 0) + 1,]
#>   Time Value
#> 4    4     3
#> 8    8     3

我們可以看到這也適用於更一般的情況:

 Time <- seq(0, 10, 0.1)
 Value <- sin(Time)
 Data <- data.frame(Time, Value)
 
 plot(Data$Time, Data$Value)
 
 Data2 <- Data[which(diff(sign(diff(Data$Value))) < 0) + 1,]
 
 abline(v = Data2$Time, col = 'red')

在此處輸入圖像描述


編輯

根據 OP 提供的更多信息,我們似乎正在尋找 120 秒窗口內的最大值。 在這種情況下,我們可以像這樣更容易地得到解決方案:

library(dplyr)
 
bin_size <- 4 # Used for example only, will be 120 in real use case

Data %>% 
  mutate(Bin = floor((Time - 1) / bin_size)) %>%
  group_by(Bin) %>%
  filter(Value == max(Value))
#> # A tibble: 3 x 3
#> # Groups:   Bin [3]
#>    Time Value   Bin
#>   <dbl> <dbl> <dbl>
#> 1     4     3     0
#> 2     8     3     1
#> 3    12     3     2

顯然在真實數據中,將bin_size改為 120。

也許這個?

library(dplyr)

Data %>% 
  slice_max(Value)

  Time Value
1    4     3
2    8     3
3   12     3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM