子集行根据一段时间

Wet*_*eet 15 time r

我有一个看起来像这样的数据框

            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-27 03:05:05     87  103 4.79883 2.57697 
5 2009-02-27 04:05:05     87  103 4.10156 2.20254 
6 2009-02-27 05:05:05     87  103 2.59961 1.39599
Run Code Online (Sandbox Code Playgroud)

无论如何我可以根据时间范围对其进行子集化,例如,凌晨2点到凌晨5点.然后我应该得到一个看起来像这样的结果:

            date_time loc_id node  energy   kgco2  
3 2009-02-27 02:05:05     87  103 6.40039 3.43701 
4 2009-02-27 03:05:05     87  103 4.79883 2.57697 
5 2009-02-27 04:05:05     87  103 4.10156 2.20254 
Run Code Online (Sandbox Code Playgroud)

jub*_*uba 16

一种方法是使用lubridate 和定义间隔:

library(lubridate)

date1 <- as.POSIXct("2009-02-27 02:00:00")
date2 <- as.POSIXct("2009-02-27 05:00:00")
int <- new_interval(date1, date2)

df[df$datetime %within% int,]
Run Code Online (Sandbox Code Playgroud)

  • 只是为了更新这个伟大的答案,现在 `new_interval()` 已被弃用。请改用“interval()”。 (3认同)

Sim*_*lon 15

我会使用lubridate包和hour()功能让你的生活更轻松......

require( lubridate )

with( df , df[ hour( date_time ) >= 2 & hour( date_time ) < 5 , ] )

#            date_time loc_id node  energy   kgco2
#3 2009-02-27 02:05:05     87  103 6.40039 3.43701
#4 2009-02-27 03:05:05     87  103 4.79883 2.57697
#5 2009-02-27 04:05:05     87  103 4.10156 2.20254
Run Code Online (Sandbox Code Playgroud)


Chi*_*til 5

我建议使用xts包进行时间序列分析.它具有非常方便的子集功能.

DF
##             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-27 03:05:05     87  103 4.79883 2.57697
## 5 2009-02-27 04:05:05     87  103 4.10156 2.20254
## 6 2009-02-27 05:05:05     87  103 2.59961 1.39599

require(xts)
XTSDATA <- xts(DF[, -1], DF[, 1])
XTSDATA["T02:00:00/T05:00:00"]
##                     loc_id node  energy   kgco2
## 2009-02-27 02:05:05     87  103 6.40039 3.43701
## 2009-02-27 03:05:05     87  103 4.79883 2.57697
## 2009-02-27 04:05:05     87  103 4.10156 2.20254
Run Code Online (Sandbox Code Playgroud)