[英]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.