获取R中一组行的最大值

时间:2017-01-23 16:37:26

标签: r

所以我有一组时间序列数据,整整一个月由1分钟间隔组成。我希望从这些数据中得到一些结果。

  • 最高利用时间为一小时。
  • 最低利用时间为一小时。
  • 同样的一天。

在我收到10个帖子之前,无法添加我的数据样本。

我已将其复制到另一个数据集中,因此我不会改变另一个数据集。

busiestmin <- rdata6
dput(MyData)
busiestmin[ busiestmin$Utilized == max(busiestmin$Utilized) , ] 
# A tibble: 1 × 3
  Entitled Utilized            datetime
  <dbl>    <dbl>              <dttm>
    1     2.73 2016-12-18 02:10:00
busiestmin[ busiestmin$Utilized == min(busiestmin$Utilized) , ]
# A tibble: 22 × 3
   Entitled Utilized            datetime
    <dbl>    <dbl>              <dttm>
      0        0 2016-12-11 03:03:00
      0        0 2016-12-11 03:04:00
      0        0 2016-12-11 03:05:00
      0        0 2016-12-11 03:06:00
      0        0 2016-12-11 03:07:00
      0        0 2016-12-11 03:08:00
      0        0 2016-12-11 03:09:00
      0        0 2016-12-11 03:10:00
      0        0 2016-12-11 03:11:00
      0        0 2016-12-11 03:12:00

#...还有12行 正如你在上面所看到的,我知道如何获得一行的最小值和最大值,但是想要显示一组60行(1小时)和1440行(1天)。

不确定样本数据集的链接是否有效?

dput (MyData) 
 Entitled   Utilized    datetime
  1     1.04        12/3/2016 0:01
  1     1.04        12/3/2016 0:02
  1     1.04        12/3/2016 0:03
  1     1.20        12/3/2016 0:04
  1     1.21        12/3/2016 0:05

1 个答案:

答案 0 :(得分:3)

我认为使用lubridate会帮助你解决很多问题。

这是我在您的示例数据中读取的内容:

library(readr)
example_data <- read_csv("Entitled, Utilized, datetime\n
                                 1,     1.04, 2016-12-03 00:01:00\n
                                 1,     1.04, 2016-12-03 00:02:00\n
                                 1,     1.04, 2016-12-03 00:03:00\n
                                 1,     1.20, 2016-12-03 00:04:00\n
                                 1,     1.21, 2016-12-03 00:05:00\n
                                 1,     1.05, 2016-12-03 00:06:00\n
                                 1,     1.05, 2016-12-03 00:07:00\n
                                 1,     1.05, 2016-12-03 00:08:00\n
                                 1,     1.43, 2016-12-03 00:09:00\n
                                 1,     1.60, 2016-12-03 00:10:00")

由于您的示例数据全部来自同一时段,因此我们无法看到小时和天之间的差异,但这应该适用于您所说的内容。我们需要做的第一件事就是设置一个新变量来跟踪每个时间戳来自哪一天(或小时)。你可以使用来自lubridate的floor_date

library(lubridate)
library(dplyr)

example_data %>% 
    mutate(FloorDate = floor_date(datetime, unit = "1 day"))
#> # A tibble: 10 × 4
#>    Entitled Utilized            datetime  FloorDate
#>       <int>    <dbl>              <dttm>     <dttm>
#> 1         1     1.04 2016-12-03 00:01:00 2016-12-03
#> 2         1     1.04 2016-12-03 00:02:00 2016-12-03
#> 3         1     1.04 2016-12-03 00:03:00 2016-12-03
#> 4         1     1.20 2016-12-03 00:04:00 2016-12-03
#> 5         1     1.21 2016-12-03 00:05:00 2016-12-03
#> 6         1     1.05 2016-12-03 00:06:00 2016-12-03
#> 7         1     1.05 2016-12-03 00:07:00 2016-12-03
#> 8         1     1.05 2016-12-03 00:08:00 2016-12-03
#> 9         1     1.43 2016-12-03 00:09:00 2016-12-03
#> 10        1     1.60 2016-12-03 00:10:00 2016-12-03

如果您的数据中包含超过一天或一小时的数据,您将在我们刚刚创建的新列中看到这些数据。如果要查找每小时的最大/最小值,可以使用unit = "1 hour"。现在,我们可以使用group_bysummarize来查找每天的最大值和分钟数。

example_data %>% 
    mutate(FloorDate = floor_date(datetime, unit = "1 day")) %>%
    group_by(FloorDate) %>%
    summarise(MaxUtilized = max(Utilized),
              MinUtilized = min(Utilized))
#> # A tibble: 1 × 3
#>    FloorDate MaxUtilized MinUtilized
#>       <dttm>       <dbl>       <dbl>
#> 1 2016-12-03         1.6        1.04

如果您的真实数据有多天,那么此处的结果将包含每天的行数,每行的最大值和最小值。