繁体   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