如何按时间而不是日期对数据集进行子集划分?



我有一个包含时间和日期列表的数据集。我想要它的子集,所以我只有在06:30:00到07:30:00之间的条目。我尝试使用以下函数对其进行子集设置:field1_temp$Time<-field1_temp$Time["T06:30:00/T07:30:00"].

数据集的结构如下:

> str(field1_temp)
'data.frame':   17066 obs. of  3 variables:
$ No.         : int  1 2 3 4 5 6 7 8 9 10 ...
$ Time        : POSIXlt, format: "2021-02-08 14:56:07" "2021-02-08 14:57:07" "2021-02-08 14:58:07" ...
$ Temperature.: num  6.8 6.5 6 5 4.7 4.8 4.2 3.6 2.9 2.3 ...

运行该函数时,我只返回NAs,尽管它们是在指定的正确时间段内出现的。

既然你的TimePOSIXlt格式的,那么hourmin的信息应该是单独存在的。试一试:

result <- field1_temp[with(field1_temp$Time, hour == 6 & min >= 30 | 
hour == 7 & min <= 30), ]

使用最后注释中可重复显示的输入,我们将其读入zoo对象,将其转换为xts,最后使用问题中的符号对其进行子集。下面的代码还将POSIXlt日期时间转换为POSIXct,这是一个更适合于时间序列的类。您可以使用fortify.zoo(x0)将其转换为数据帧,但最好将其保留为xts对象,以便于访问它和zoo提供的时间序列功能。

library(xts)
z <- read.zoo(d, index = "Time", FUN = as.POSIXct)
x <- as.xts(z)
x0 <- x["T14:56:00/T14:56:59"]
x0
No Temperature
2021-02-08 14:56:07  1         6.8

注意

d <- data.frame(No = 1:2,
Time =  as.POSIXlt(c("2021-02-08 14:56:07", "2021-02-08 14:57:07")),
Temperature = c(6.8, 6.5))

最新更新