r-如何比较数据帧中多个局部极小值之间的值



我有一个如下的数据帧-

df <- cbind(c(1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3),c(4,8,12,18,21,24,27,1,4,7,10,13,16,19,22,25,28,5,10,15,20,25), c(1.0,0.7,2.0,2.9,1.6,0.6,0.9,2,4,1,8,4,2,0.8,1.2,1.0,0.6,2,9,7,4,5))
colnames(df) <- c("ID","time","value")

因此,两个ID都有超过1个局部极小值。我想确定峰值后局部极小值是否大于或小于峰值前局部极小值,并提取峰值后局部最小值小于峰值前本地极小值的ID,并捕捉上升的时间。所以我想创建一个列";索引";如果峰前局部最小值大于峰后局部最小值,则其将为0,并且如果峰前本地最小值小于峰后本地最小值。因此,对于ID 1和2,索引列将为0,但对于3,它将为1。随后,我想捕捉峰值的时间。因此,得到的数据帧将类似于

df1 <- cbind(c(1,2),c(18,10), c(0,0))
colnames(df1) <- c("ID","time","index")

我可以用这个代码捕捉上升的时间

df1 <- df%>%group_by(ID)%>%mutate(peak = which.max(c(diff(value),TRUE)))
df1 <- df1%>%group_by(ID)%>%filter(row_number == peak)

然而,我无法捕捉到";索引";列基于峰前最小值与峰后最小值的比较。

请帮帮我。

这有帮助吗?

library(dplyr)
df %>%
group_by(ID) %>%
slice(which.max(value)) %>%
ungroup %>%
mutate(index = as.integer(lead(time, default = Inf) > time)) %>%
filter(index == 0)
#     ID  time value index
#  <dbl> <dbl> <dbl> <int>
#1     1    18   2.9     0
#2     2    10   8       0

相关内容

  • 没有找到相关文章

最新更新