[英]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 和相關時間的新數據框。 在此示例中,最大值每四個時間間隔出現一次。 我想將數據分組到箱中並找到相關的最大值。
出於說明目的,我將示例保持簡單,但是請記住:
感謝您在此過程中提供的任何幫助!
您可以通過查找Value
列的diff
sign
的diff
為負的點來找到局部最大值。
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.