2017-01-23 64 views
2

因此,我有一整套由1分鐘間隔組成的整個月份的時間序列數據。我期待從這些數據中獲得一些結果。獲取R中一組行的最大值

  • 利用率最高的一個小時。
  • 使用最少的一個小時。
  • 同樣的一天。

無法添加我的數據的示例,直到我得到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

請根據示例 – akrun

+1

顯示一個可重複使用的示例和預期輸出它不會讓我從r studio中複製並粘貼它?有任何想法嗎? –

+3

您可以以最適合SO的形式添加數據 - 作爲文本。請使用'dput(MyData)'獲取數據的文本格式,您可以將其粘貼到您的問題中。如果數據太多,你可以嘗試'dput(head(MyData,20))' – G5W

回答

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 

如果實際數據中有多個日子裏,在這裏你的結果將有行的每一天,與最大和最小每個。

+0

非常感謝你。 –