首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较数据帧中多个局部最小值之间的值?

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

Stack Overflow用户
提问于 2021-03-24 17:55:25
回答 1查看 55关注 0票数 0

我有一个如下的数据框架-

代码语言:javascript
复制
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都有多个局部最小值。我想确定峰值后的局部最小值是大于还是小于峰值前的局部最小值,并提取峰值后的局部最小值小于峰值前的局部最小值的ID,并捕获上升的时间。所以我想创建一个列"index“,如果峰值前的局部最小值大于峰值后的局部最小值,它将为0,如果峰值前的局部最小值小于峰值后的局部最小值,则该列将等于1。因此,对于ID 1和2,索引列将是0,而对于3,它将是1。随后,我希望捕获峰值时间。因此,得到的数据框应该是这样的

代码语言:javascript
复制
df1 <- cbind(c(1,2),c(18,10), c(0,0))
colnames(df1) <- c("ID","time","index")

我可以用这段代码来捕捉起床的时间-

代码语言:javascript
复制
df1 <- df%>%group_by(ID)%>%mutate(peak = which.max(c(diff(value),TRUE)))
df1 <- df1%>%group_by(ID)%>%filter(row_number == peak)

然而,我不能根据峰前和峰后最小值的比较来捕获"index“列。

请帮帮我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-25 15:22:19

这有帮助吗?

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66778581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档