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

R 如何比较数据帧中多个局部极小值之间的值?,r,filter,row,minima,R,Filter,Row,Minima,我有一个如下的数据帧- 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","

我有一个如下的数据帧-

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")
df这有帮助吗

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
库(dplyr)
df%>%
分组依据(ID)%>%
切片(哪个.max(值))%>%
解组%>%
mutate(index=as.integer(lead(time,default=Inf)>time))%>%
筛选器(索引==0)
#ID时间值索引
#     
#1     1    18   2.9     0
#2     2    10   8       0

你能解释一下你的数据中哪一个是上升后的局部极小值和上升前的局部极小值,以及如何选择时间吗?@RonakShah上升是最大值,时间是最大值的时间。例如,对于ID 1,2.9为最大值或峰值,18为上升时间…对于ID 2,8为最大值或峰值,时间为10…但对于ID 3,峰前最小值小于峰后上升…因此,即使存在峰值,它不符合标准…因为标准是峰前最小值大于峰后最小值。@ronakshah上升是最大值,时间是最大值的时间。例如,对于ID 1,2.9为最大值或峰值,18为上升时间…对于ID 2,8为最大值或峰值,时间为10…但对于ID 3,峰前最小值小于峰后上升…因此,即使存在峰值,它不符合标准…因为标准是峰前最小值大于峰后最小值。嗨,有人能帮我吗???它起作用了。非常感谢你。
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