我是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进行编码,因此它会自动识别我正在查看的时间段?
你似乎知道基本的想法,但只是错过了细节.正如您所提到的,我们只是将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)