2017-08-21 4 views
4

私の質問は基本的に質問にフォローアップが予めユーザウェット足でhereを上げる(税込分。):サブセット行

これは修正データセットです。

 date_time loc_id node energy kgco2 
1 2009-02-27 00:11:08  87 103 0.00000 0.00000 
2 2009-02-27 01:05:05  87 103 7.00000 3.75900 
3 2009-02-27 02:05:05  87 103 6.40039 3.43701 
4 2009-02-28 02:10:05  87 103 4.79883 2.57697 
5 2009-02-28 04:05:05  87 103 4.10156 2.20254 
6 2009-02-28 05:05:05  87 103 2.59961 1.39599 
7 2009-03-01 03:20:05  87 103 2.59961 1.39599 

私は特定の時間間隔内にある行だけを取得しようとしています。 02:05:00〜03:30:00。私も私の間隔の分を考慮する必要があるため(lubridateパッケージからhour)リンク問題の解決策を適用する

3 2009-02-27 02:05:05  87 103 6.40039 3.43701 
4 2009-02-28 02:10:05  87 103 4.79883 2.57697 
7 2009-03-01 03:20:05  87 103 2.59961 1.39599 

、しかし、十分ではありません。私はlubridateパッケージのinterval機能を使用して分を含めることができましたが、私のデータフレームは異なる日付を扱うので、役に立たないでしょう。

dplyrfilter動詞を使用できる解決策があるかどうかは特に興味があります。または、xtsパッケージを唯一の方法で使用していますか?

+0

私はあなたには、いくつかの 'or'年代と' and'年代に 'minutes'を使用する必要があるとしていると思う:'フィルタ((時間(DATE_TIME)== 2&分(date_time)> = 5)| (hour(date_time)== 3&minutes(date_time)<= 30)) ' – Hugh

+2

関連性のある、恐らく重複 - https://stackoverflow.com/questions/44251861/filter-all-days-between-a-time- range-in-r/44251952 – thelatemail

答えて

0

以下のコードでは、真夜中からの秒数を計算し、その値が質問の時間範囲内にあるかどうかを確認します。また、深夜から秒に変換されます。私はデータサンプルが再現可能な形式で提供されていなかったので、datetime形式(およびUTCタイムゾーン)でデータを設定するコードを追加しました。

1.

hms_to_numeric = function(x) { 
    x = as.POSIXct(paste("2010-01-01", x)) 
    3600 * hour(x) + 60 * minute(x) + second(x) 
} 

3.フィルターのデータが含まれるように真夜中以来秒にHMS時間文字列を変換するために、データフレーム

library(lubridate) 
library(tidyverse) 

dat = read.table(text="date_time time loc_id node energy kgco2 
       1 2009-02-27 00:11:08  87 103 0.00000 0.00000 
       2 2009-02-27 01:05:05  87 103 7.00000 3.75900 
       3 2009-02-27 02:05:05  87 103 6.40039 3.43701 
       4 2009-02-28 02:10:05  87 103 4.79883 2.57697 
       5 2009-02-28 04:05:05  87 103 4.10156 2.20254 
       6 2009-02-28 05:05:05  87 103 2.59961 1.39599 
       7 2009-03-01 03:20:05  87 103 2.59961 1.39599", 
       header=TRUE, stringsAsFactors=FALSE) 

dat$date_time = as.POSIXct(paste0(dat$date_time, dat$time), tz="UTC") 
dat = dat %>% select(-time) 

2.ヘルパー機能を設定します時間範囲内の行のみ

dat %>% 
    filter(between(as.numeric(date_time) - as.numeric(as.POSIXct(substr(date_time,1,10), tz="UTC")), 
       hms_to_numeric("02:05:00"), 
       hms_to_numeric("03:30:00"))) 
  date_time loc_id node energy kgco2 
1 2009-02-27 02:05:05  87 103 6.40039 3.43701 
2 2009-02-28 02:10:05  87 103 4.79883 2.57697 
3 2009-03-01 03:20:05  87 103 2.59961 1.39599