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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么cut()将我的POSIXct向量转换为因子向量,我该怎么做才能阻止它?相关的知识,希望对你有一定的参考价值。

如何在保持date.time向量的POSIXct类的同时使用cut?

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)。

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

答案

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> 
另一答案

你也可以使用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))

以上是关于为什么cut()将我的POSIXct向量转换为因子向量,我该怎么做才能阻止它?的主要内容,如果未能解决你的问题,请参考以下文章

xts 函数不将我的 POSIXct 日期视为适当的基于时间的对象

xts 函数不将我的 POSIXct 日期视为适当的基于时间的对象

如何将具有离散值范围的数值向量转换为因子?

因子到数值的转换

R中从POSIXct到日期的日期转换

R语言数据类型numeric