为什么cut()将我的POSIXct向量转换为因子向量,我该怎么做才能阻止它?

时间:2018-03-01 20:02:55

标签: r data.table

如何在维护date.time向量的POSIXct类时使用剪切?

library(data.table)
library(lubridate)

一些数据:

air.temp <- c(-1.7202,-1.6524,-1.5689,-1.6785,-1.6060,-1.8843)
soil.temp <- c(3.6972,3.6839,3.6716,3.6586,3.6460,3.6701)       
date.time <- c('2007-01-01 00:05:00','2007-01-01 00:10:00',
               '2007-01-01 00:15:00','2007-01-01 00:20:00',
               '2007-01-01 00:25:00','2007-01-01 00:30:00')


DT <- data.table(date.time, air.temp, soil.temp)
DT[, date.time := parse_date_time(date.time, 'YmdHMS')]

结构显示date.time列采用所需的POSIXTct格式:

str(DT)

Classes ‘data.table’ and 'data.frame':  6 obs. of  3 variables:
 $ date.time: POSIXct, format: "2007-01-01 00:05:00" ...
 $ air.temp : num  -1.72 -1.65 -1.57 -1.68 -1.61 ...
 $ soil.temp: num  3.7 3.68 3.67 3.66 3.65 ...
 - attr(*, ".internal.selfref")=<externalptr> 

现在我将五分钟数据剪切到十五分钟:

DT_15_min <- DT[, lapply(.SD, mean), by=(date.time = cut(date.time, "15 min"))]

结构显示转换为因子向量:

str(DT_15_min)

    Classes ‘data.table’ and 'data.frame':  2 obs. of  3 variables:
 $ date.time: Factor w/ 2 levels "2007-01-01 00:05:00",..: 1 2
 $ air.temp : num  -1.65 -1.72
 $ soil.temp: num  3.68 3.66
 - attr(*, ".internal.selfref")=<externalptr> 

是否可以在保持POSIXct矢量类的同时进行剪切?

我想要的结果是让我的数据从五分钟间隔到十五分钟间隔,同时保持矢量的原始类别(在这种情况下为POSIXct)。

一如既往,我很感激任何建议。

2 个答案:

答案 0 :(得分:2)

cut旨在返回因素。如果您想以15分钟的间隔进行分组,可以尝试使用lubridate中的舍入函数,例如

DT_15_min <- DT[, lapply(.SD, mean), by=(date.time = floor_date(date.time, "15 mins"))]

str(DT_15_min)
Classes ‘data.table’ and 'data.frame':  3 obs. of  3 variables:
 $ date.time: POSIXct, format: "2007-01-01 00:00:00" "2007-01-01 00:15:00" ...
 $ air.temp : num  -1.69 -1.62 -1.88
 $ soil.temp: num  3.69 3.66 3.67
 - attr(*, ".internal.selfref")=<externalptr> 

答案 1 :(得分:1)

你也可以使用dplyr:

df=tibble(date.time, air.temp, soil.temp)%>%mutate(date.time=ceiling_date(ymd_hms(date.time),unit="15 mins"))%>%
  group_by(date.time)%>%summarize_all(funs(mean))