2017-07-10 5 views
1

ログメッセージを表すチブルがあります。それは(とりわけ)2つの列がありますdplyr :: datetimeとlubridate :: dsecondsで作業するときのエラー

  • FileCreationDateTimeは、メッセージが発信され、従って、変数をグループ化するように意図されたログファイルを識別する。 (「ファイル名」と考えて)
  • EventDateTimeは、私が今、何をしたいのか、いくつかのイベントが

を起こった時刻が開始時刻、終了時刻、各ログファイルの時間を見つけることです(FileCreationDateTimeによって識別される)。

file_durations <- 
    logMessages%>% 
    group_by(FileCreationDateTime) %>% 
    summarise(start = min(EventDateTime), 
      end = max(EventDateTime), 
      duration = dseconds(end - start)) 

コード自体がエラーなしで実行するようだ、私はしかし、結果を印刷することはできませんどちらもそれにアクセスする(少なくともないコラム「期間」):私は(または思考)これは次のコードで行うことができると思いますエラーが返されるので、エラーがdatetimesの正確な値に依存するように見えることがわかりました。私は2つのティブルでMWEをまとめました。 2つのティブルは、1つの値だけが異なります。 1つは動作し、もう1つは動作しません。何が原因でエラーが発生するのかわかりません。誰かが私を啓発することはできますか?

人間が読めるtibbles:

> working 
# A tibble: 2 × 2 
      EventDateTime FileCreationDateTime 
        <dttm>    <dttm> 
1 2016-11-24 16:16:44.986 2016-11-24 16:16:46 
2 2016-11-24 16:17:43.282 2016-11-24 16:16:46 

> broken 
# A tibble: 2 × 2 
      EventDateTime FileCreationDateTime 
        <dttm>    <dttm> 
1 2016-11-24 16:16:44.986 2016-11-24 16:16:46 
2 2016-11-24 16:18:31.971 2016-11-24 16:16:46 

完全MWE:

library(tidyverse) 
library(lubridate) 

options(digits.secs = 6, digits = 6) 

working <- structure(list(EventDateTime = structure(c(1480004204.987, 1480004263.283), 
                class = c("POSIXct", "POSIXt"), 
                tzone = "UTC"), 
          FileCreationDateTime = structure(c(1480000606, 1480000606), 
                  class = c("POSIXct", "POSIXt"), 
                  tzone = "Europe/Vienna")), 
        .Names = c("EventDateTime", "FileCreationDateTime"), 
        row.names = c(NA, -2L), 
        class = c("tbl_df", "tbl", "data.frame")) 

working %>% 
    group_by(FileCreationDateTime) %>% 
    summarise(start = min(EventDateTime), 
      end = max(EventDateTime), 
      duration = dseconds(end - start)) 

broken <- structure(list(EventDateTime = structure(c(1480004204.987, 1480004311.972), 
                class = c("POSIXct", "POSIXt"), 
                tzone = "UTC"), 
          FileCreationDateTime = structure(c(1480000606, 1480000606), 
                  class = c("POSIXct", "POSIXt"), 
                  tzone = "Europe/Vienna")), 
        .Names = c("EventDateTime", "FileCreationDateTime"), 
        row.names = c(NA, -2L), 
        class = c("tbl_df", "tbl", "data.frame")) 

broken %>% 
    group_by(FileCreationDateTime) %>% 
    summarise(start = min(EventDateTime), 
      end = max(EventDateTime), 
      duration = dseconds(end - start)) 

私は

のWindows 10上でR 3.4.0 64ビット、lubridate_1.6.0とdplyr_0.5.0を使用しています

助けてくれてありがとう!

+0

誰かが再現できますか? – AEF

答えて

1

私はついにこの問題を発見しました。 dplyrではなく、lubridate::dsecondsとすることはできません。既に報告されているように(例えばthis issue)、60より大きい整数以外の入力に失敗します。これは明らかに私の問題です。

関連する問題