为什么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 日期视为适当的基于时间的对象