排除R中的特定时间段

lhm*_*hmv 6 r date posixct

我是R的初学者,并尝试在某些时间段内搜索数据提取但似乎找不到任何东西.

我有一个连续数据的时间序列,以10分钟的间隔测量,为期五个月.为简单起见,数据有两列,如下所示:

Timestamp   Temp.Diff
2/14/2011 19:00 -0.385
2/14/2011 19:10 -0.535
2/14/2011 19:20 -0.484
2/14/2011 19:30 -0.409
2/14/2011 19:40 -0.385
2/14/2011 19:50 -0.215

......接下来的五个月还会继续.我已经使用as.POSIXct()读入了Timestamp列到R中.

假设一天的某些时间是我感兴趣的,(例如,从中午12点到下午3点),我想无论是要排除的其他时间为一天,或只是提取那3个小时,但仍然有数据流顺序地(即以时间序列).我知道如果您知道行号,您可以轻松地对数据进行子集化,但由于这是一个更大的数据集,有没有办法对R进行编码,因此它会自动识别我正在查看的时间段?

csg*_*pie 6

你似乎知道基本的想法,但只是错过了细节.正如您所提到的,我们只是将Timestamps转换为POSIX对象然后是子集.

lubridate解决方案

最简单的方法可能是使用lubridate.首先加载包:

library(lubridate)
Run Code Online (Sandbox Code Playgroud)

接下来转换时间戳:

##*m*onth *d*ay *y*ear _ *h*our *m*inute
d = mdy_hm(dd$Timestamp)
Run Code Online (Sandbox Code Playgroud)

然后我们选择我们想要的东西.在这种情况下,我希望在晚上7:30之后的任何日期(无论白天):

dd[hour(d) == 19 & minute(d) > 30 | hour(d) >= 20,]
Run Code Online (Sandbox Code Playgroud)

基础R解决方案

首先创建一个上限:

lower = strptime("2/14/2011 19:30","%m/%d/%Y %H:%M")
Run Code Online (Sandbox Code Playgroud)

接下来转换POSIX对象中的时间戳:

d = strptime(dd$Timestamp, "%m/%d/%Y %H:%M")
Run Code Online (Sandbox Code Playgroud)

最后,一些数据帧子集:

dd[format(d,"%H:%M") > format(lower,"%H:%M"),]
Run Code Online (Sandbox Code Playgroud)

感谢plannap对这最后一部分


以上示例的数据:

dd = read.table(textConnection('Timestamp Temp.Diff
"2/14/2011 19:00" -0.385
"2/14/2011 19:10" -0.535
"2/14/2011 19:20" -0.484
"2/14/2011 19:30" -0.409
"2/14/2011 19:40" -0.385
"2/14/2011 19:50" -0.215'), header=TRUE)
Run Code Online (Sandbox Code Playgroud)