我目前正在研究土壤湿度,必须从我的时间序列数据中获得每小时和每天的平均值。
当我将dataframe转换为xts对象时,时间序列发生了变化,但我不知道原因。
数据框中的数据如下所示:
time MC temp
1 2018-06-27 11:30:00 17.1 15.8
2 2018-06-27 11:45:00 17.0 15.8
3 2018-06-27 12:00:00 17.0 15.8
4 2018-06-27 12:15:00 17.0 15.9
5 2018-06-27 12:30:00 17.2 15.9
6 2018-06-27 12:45:00 17.0 16.0但当我转换它时,时间戳从2018-01-09 00:00开始,并以5分钟为增量。这是我使用的代码:
sm_xts <- xts(sm.data[,2:3], as.Date(sm.data$time))
sm_zoo <- read.zoo(sm.data, index.column = 1)
dat_xts <- as.xts(sm_zoo)我已经将时间戳转换为as.POSIXct类,并检查了时间序列中的重复项。
> anyDuplicated(sm.data$time)
[1] 0发布于 2019-04-05 15:42:24
也许您在初始数据输入过程中遇到了一些问题。
df
# time MC temp
# 1 2018-06-27 11:30:00 17.1 15.8
# 2 2018-06-27 11:45:00 17.0 15.8
# 3 2018-06-27 12:00:00 17.0 15.8
# 4 2018-06-27 12:15:00 17.0 15.9
# 5 2018-06-27 12:30:00 17.2 15.9
# 6 2018-06-27 12:45:00 17.0 16.0现在,日期和时间值以char的形式存储在单个变量中
str(df$time)
# chr [1:6] "2018-06-27 11:30:00" "2018-06-27 11:45:00" ...让我们把它转换成真实的日期和时间,这样就不会丢失时间信息:
strptime(df$time, "%Y-%m-%d %H:%M:%S")
# [1] "2018-06-27 11:30:00 EEST" "2018-06-27 11:45:00 EEST"
# [3] "2018-06-27 12:00:00 EEST" "2018-06-27 12:15:00 EEST"
# [5] "2018-06-27 12:30:00 EEST" "2018-06-27 12:45:00 EEST"看起来很管用。时区可能出现的问题超出了本答案的范围。
现在,让我们将数据帧转换为xts。在完成的xts中,我们不需要符号形式的日期和时间。所以我们排除了第一列。
df2xts <- xts(df[,2:3], order.by=strptime(df$time, "%Y-%m-%d %H:%M:%S"))
df2xts
# time MC temp
# 1 2018-06-27 11:30:00 17.1 15.8
# 2 2018-06-27 11:45:00 17.0 15.8
# 3 2018-06-27 12:00:00 17.0 15.8
# 4 2018-06-27 12:15:00 17.0 15.9
# 5 2018-06-27 12:30:00 17.2 15.9
# 6 2018-06-27 12:45:00 17.0 16.0https://stackoverflow.com/questions/55304037
复制相似问题