r - 使用Zoo包查找确定的数据组的最大值

标签 r max zoo

我刚刚与R合作了几个月,我遇到了一个动物园系列的问题,该系列每五分钟就有一次数据。序列中没有丢失的时间点,但是数据上有一些NaN值。

>str(SerieCompleta)
‘zoo’ series from 2011-01-01 to 2011-12-31 23:55:00
 Data: num [1:104737, 1] 0 0 0 0 0 0 0 0 0 0 ...
- attr(*, "na.action")=Class 'omit'  num [1:383] 2017 3745 5761 6786 6787 ...
 Index:  POSIXct[1:104737], format: "2011-01-01 00:00:00" "2011-01-01 00:05:00" ...

我需要找到最大数量的数据组,并且数据组应以三十个或更多的连续分钟分隔,并使用零值。
2011-01-02 05:15:00 0
2011-01-02 05:20:00 0
2011-01-02 05:25:00 0
2011-01-02 05:30:00 0
2011-01-02 05:35:00 0.1 |
2011-01-02 05:40:00 0.2 <--- maximum of group
2011-01-02 05:45:00 0.2 |
2011-01-02 05:50:00 0.1 |
2011-01-02 05:55:00 0.1 |
2011-01-02 06:00:00 0.1 |
2011-01-02 06:05:00 0.1 |
2011-01-02 06:10:00 0   |
2011-01-02 06:15:00 0   |
2011-01-02 06:20:00 0.1 |
2011-01-02 06:25:00 0
2011-01-02 06:30:00 0
2011-01-02 06:35:00 0
2011-01-02 06:40:00 0     thirty or more consecutive minutes with zero values on data
2011-01-02 06:45:00 0
2011-01-02 06:50:00 0
2011-01-02 06:55:00 0
2011-01-02 07:00:00 0.2 |
2011-01-02 07:05:00 2.5 <--- maximum of group
2011-01-02 07:10:00 0 

输出应如下所示:
2011-01-02 05:40:00 0.2
2011-01-02 07:05:00 2.5

我不知道是否可以使用R功能来做到这一点。预先感谢您的任何建议。

最佳答案

我将您的数据列称为x(x仅包含数字数据,不包括日期和时间)。我将进一步假设您没有丢失的时间点,并且所有时间点都相距5分钟。这是一个将返回两列矩阵的函数,其中每行包含组的开始和结束索引(它忽略开始和结束处的零):

blocks <- function(x) {
    z <- rle(x==0)
    breaks <- which(z$lengths >= 6 & z$values == TRUE)
    breaks <- breaks[!breaks %in% c(1, length(z$lengths))]
    break.idx <- cumsum(z$lengths)
    cbind(c(1, break.idx[breaks] + 1), c(break.idx[breaks-1], length(x)))
}

为了您的数据,您将获得
> x
 [1] 0.0 0.0 0.0 0.0 0.1 0.2 0.2 0.1 0.1 0.1 0.1 0.0 0.0 0.1 0.0 0.0 0.0 0.0 0.0
[20] 0.0 0.0 0.1 2.5 0.0
> blocks(x)
     [,1] [,2]
[1,]    1   14
[2,]   22   24

现在,只需将which.max函数应用于您的组即可获得具有最大值的索引:
> apply(blocks(x), 1, function(i) {which.max(x[i[1]:i[2]]) + i[1] - 1})
[1]  6 23

关于r - 使用Zoo包查找确定的数据组的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11043855/

相关文章:

r - mean(x, na.rm = TRUE) 的错误结果

r - 如何使用lappy删除R中列表中元素的插槽

python - 第一列的最大值

r - 无法安装动物园包 (R)

mysql - 从基于 MySQL 的表获取自定义结果

max - perl6 混合 Str 和 Int 参数的最小值和最大值

r - 在 R 中按季度对数据进行分组,但在没有数据时考虑季度

r - .SD 和 .SDcols 用于 data.table 连接中的 i 表达式

r - R:使用子元素对嵌套列表中的值进行计数

r - 将多个大型 csv 文件合并(rbind)为一个具有不同列顺序的文件