【问题标题】:R code to get max count of time series data by groupR代码按组获取时间序列数据的最大计数
【发布时间】:2020-01-29 03:50:33
【问题描述】:

我想获得时间序列数据的摘要,其中组为“Flare”,FlareLength 的最大值是该组感兴趣的数据。

如果我有一个数据框,像这样:


   Date           Flare       FlareLength
1  2015-12-01     0           1
2  2015-12-02     0           2
3  2015-12-03     0           3
4  2015-12-04     0           4
5  2015-12-05     0           5
6  2015-12-06     0           6
7  2015-12-07     1           1
8  2015-12-08     1           2
9  2015-12-09     1           3
10 2015-12-10     1           4
11 2015-12-11     0           1
12 2015-12-12     0           2
13 2015-12-13     0           3
14 2015-12-14     0           4
15 2015-12-15     0           5
16 2015-12-16     0           6
17 2015-12-17     0           7
18 2015-12-18     0           8
19 2015-12-19     0           9
20 2015-12-20     0          10
21 2015-12-21     0          11
22 2016-01-11     1           1
23 2016-01-12     1           2
24 2016-01-13     1           3
25 2016-01-14     1           4
26 2016-01-15     1           5
27 2016-01-16     1           6
28 2016-01-17     1           7
29 2016-01-18     1           8

我想要这样的输出:

  Date           Flare       FlareLength
1 2015-12-06     0           6
2 2015-12-10     1           4
3 2015-12-21     0          11
4 2016-01-18     1           8

我尝试过各种聚合形式,但对时间序列皱纹不是很熟悉。

【问题讨论】:

  • 您好,您能否提供一些您目前尝试使用的 r 代码,以便我们找出您遇到困难的部分?
  • 对不起。好点子。我对此很陌生。谢谢你的耐心。我最终在这里发布了一个更完整的代码问题:stackoverflow.com/questions/59978973/…

标签: r time-series


【解决方案1】:

使用dplyr,我们可以通过将FlareLength与之前的FlareLength值进行比较来创建一个分组变量,并在组中选择maximumFlareLength所在的行。

library(dplyr)

df %>%
  group_by(gr = cumsum(FlareLength < lag(FlareLength, 
                       default = first(FlareLength)))) %>%
  slice(which.max(FlareLength)) %>%
  ungroup() %>%
  select(-gr)

# A tibble: 4 x 3
#  Date       Flare FlareLength
#  <fct>      <int>       <int>
#1 2015-12-06     0           6
#2 2015-12-10     1           4
#3 2015-12-21     0          11
#4 2016-01-18     1           8

在带有ave 的基础R 中,我们可以这样做

subset(df, FlareLength == ave(FlareLength, cumsum(c(TRUE, diff(FlareLength) < 0)), 
           FUN = max))

【讨论】:

    猜你喜欢
    • 2015-06-23
    • 2022-01-19
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多