gpt4 book ai didi

r - 当值首先超过阈值然后保持高于阈值时获取行

转载 作者:行者123 更新时间:2023-12-05 01:50:30 25 4
gpt4 key购买 nike

我有以下数据框:

ID Date        Value
1 2010-08-01 6
1 2011-05-01 8
1 2011-12-01 7
1 2012-08-01 6
1 2013-01-01 6
1 2014-04-01 10
1 2014-08-01 8
1 2015-01-01 9
1 2016-01-01 9
1 2017-01-01 8
2 1996-01-01 5
2 1998-01-01 8
2 2010-01-01 5
2 2014-08-01 8
2 2016-01-01 8

我想为每个 ID 检测第一行 Value 等于或超过设定的阈值(在本例中: 8) 并且保持以下观察的阈值。因此,基于数据框,我想获得的结果如下:

ID Date       Value 
1 2014-04-01 10
2 2014-08-01 8

非常感谢您的帮助!谢谢!如果您需要任何其他信息或说明,请告诉我

最佳答案

不清楚 remains 情况 - 即假设 ID 的最后一个元素的“值”小于 8,则不清楚是否返回该 ID 的行。以下解决方案将跳过那些“ID”(如果存在)

library(dplyr)
library(data.table)
df1 %>%
group_by(ID) %>%
slice({ind = Value >= 8
grp = rleid(ind)
if(all(ind[grp == max(grp)]))
first(row_number()[grp == max(grp)]) else 0
}) %>%
ungroup

-输出

# A tibble: 2 × 3
ID Date Value
<int> <chr> <int>
1 1 2014-04-01 10
2 2 2014-08-01 8

数据

df1 <- structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L), Date = c("2010-08-01", "2011-05-01", "2011-12-01",
"2012-08-01", "2013-01-01", "2014-04-01", "2014-08-01", "2015-01-01",
"2016-01-01", "2017-01-01", "1996-01-01", "1998-01-01", "2010-01-01",
"2014-08-01", "2016-01-01"), Value = c(6L, 8L, 7L, 6L, 6L, 10L,
8L, 9L, 9L, 8L, 5L, 8L, 5L, 8L, 8L)), class = "data.frame", row.names = c(NA,
-15L))

关于r - 当值首先超过阈值然后保持高于阈值时获取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73028183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com