当前位置: 首页 > 知识库问答 >
问题:

高于阈值的连续值的位置和值

叶福
2023-03-14

我需要找到我的数据连续几天达到阈值的位置。我正在寻找超过阈值的4个连续观察值。我想返回符合这些标准的系列的第一个观察值的位置。

下面是一个数据集示例:

eg = structure(list(t.date = structure(c(1L, 2L, 11L, 12L, 13L, 14L, 
15L, 16L, 17L, 18L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L), .Label = c("4/30/11", 
"5/1/11", "5/10/11", "5/11/11", "5/12/11", "5/13/11", "5/14/11", 
"5/15/11", "5/16/11", "5/17/11", "5/2/11", "5/3/11", "5/4/11", 
"5/5/11", "5/6/11", "5/7/11", "5/8/11", "5/9/11"), class = "factor"), 
t.avg = c(4L, 4L, 5L, 6L, 10L, 18L, 18L, 18L, 18L, 12L, 10L, 
10L, 8L, 8L, 9L, 10L, 6L, 5L)), .Names = c("date", "avg"
), row.names = c(NA, -18L), class = "data.frame")

我想要平均符合标准的日期(平均

eg$date %in% eg$date[which(eg$avg > 17)]
# [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE
# [13] FALSE FALSE FALSE FALSE FALSE FALSE

在这种情况下,我可以将第一种情况下的< code>TRUE作为答案,但如果第二种、第三种或第四种情况不是< code>TRUE,这将不起作用

我需要条件为TRUE的第一个日期:

eg$date[which(eg$avg > 17)]
# [1] 5/5/11 5/6/11 5/7/11 5/8/11

以及该系列中第一个观察的位置:

which(eg$avg > 17)
# [1] 6 7 8 9

我已经找到了相关的问题,但我还没有能够弯曲的方法来满足我的需要。

非常感谢。

共有3个答案

司马彬
2023-03-14

也可以使用基数R:

eg$th = ifelse(eg$avg>17, 1,0)
for(i in 4:nrow(eg)) {if(sum(eg$th[(i-3):i])>3) print(i-3)}
[1] 6

实际日期:

for(i in 4:nrow(eg)) {if(sum(eg$th[(i-3):i])>3) print(eg[i-3,1])}
[1] 5/5/11
姬昀
2023-03-14

使用游程编码(rle

> rle(eg$avg > 17)
Run Length Encoding
  lengths: int [1:3] 5 4 9
  values : logi [1:3] FALSE TRUE FALSE

rleg <- rle(eg$avg > 17)
rleg$lengths[!rleg$values][1]  # returns so add one to it 
#Only works in this case b/c no test for length of run Gt 17
# if first 4 all gt 17 then return 1
# else return 1+ cumsum of lengths up to first true with length Gt or equal to 4

# The code to do that.

 if (rleg$values[1] && rleg$lengths[1] >=4 ) {1} else{
     1+ cumsum( rleg$lengths[1:which(rleg$lengths >=4 & 
                                     rleg$values)][1])}
#[1] 6
陶寒
2023-03-14
library(zoo)
#  Get the index value
xx <- which(rollapply(eg$avg,4, function(x) min(x))>17)[1]
# Get the date
eg$date[xx]
 类似资料:
  • 我有数据,我想应用滚动函数来检测哪个点的值大于特定阈值。 我想要的是找到下一个2个值高于某个阈值(例如30)的行。这将产生以下结果: 我有一个大的数据集(几百万行),所以我试图找到一个有效的解决方案。也许使用?由reprex包(v0.2.1)在2019-02-26创建

  • 当我查看注册表仪表板时,当结束时,我会看到以下警告消息: 当我查看代码时,测试始终为true 为什么是默认配置,它似乎怪异,因为它不断地产生一个警告! 如果有谁能给我一个解释。我想我错过了什么…

  • 我被困在一个问题上,希望得到一些指导。我们希望生成一个报告,计算产品的连续日期(从用户提供的日期向后看)。数据集如下: 因此,我们想得出一份报告,该报告在2021年3月2日提供的日期如下所示: 尽管我正在努力编写查询,但我甚至不知道该怎么称呼它,因为我需要一个特定阈值上的连续值计数。我可以计算阈值以上的值,但不确定如何添加“连续数周”逻辑。

  • 我有一个月的四年的流量数据,我正试图找出如何在四年中的每一年提取出某个阈值或以上的最长连续时间段。在下面的示例中,阈值是4。我想尝试使用for循环或可能的apply函数之一来实现这一点,但我不确定如何实现。 这是我的示例数据框架: 在此示例中,如果放电等于或高于阈值,则阈值列编码为 1,如果不是,则编码为 0。我能够使用以下代码部分获得一年(以下示例中的 2009 年)的所需输出: 对于2009年

  • 我有以下R数据框架: …还有更多的行! 我想得到我有值的行数。 例如: 多少行显示值 列类型S.A和S.B相互排斥,因此永远不会选择Loc2、Loc3和Loc4,因为这些都显示值 我减少了列的数量,因此可以为进一步的选择手动预定义列索引(或名称),但是,我不知道如何处理来选择显示超过某个阈值的值的行,同时还对可能出现这些值的列添加约束。 欢迎任何建议! 干杯:)

  • 假设我有一个数组, 并且我想要第一个值的索引大于65(即)。在Numpy中完成此任务的最快方法是什么(因为我的实际数据集要大得多)?