xts 格式为索引列分配名称

xts format assign name for index column

我有一个 xts 文件格式,在读取时没有索引列的名称,请参见下文。我如何为其分配名称?理想情况下,我想在后续阶段使用日期时间字段进行绘图。谢谢

                    Elapsed Time Total Inflow Total Evap Surface Infil
2021-04-30 10:02:00        0.033            0      0.125             0
2021-04-30 10:04:00        0.067            0      0.125             0
2021-04-30 10:06:00        0.100            0      0.125             0
2021-04-30 10:08:00        0.133            0      0.125             0
2021-04-30 10:10:00        0.167            0      0.125             0
2021-04-30 10:12:00        0.200            0      0.125             0

一个建议是使用可以处理 xts 数据的绘图函数。能做到这一点的函数并不多。

其他选项是将索引作为数据框中的单独列而不是 xts 对象。

library(xts)
data <- data.frame(index = index(sample.xts), coredata(sample.xts))
data

#         index     Open     High      Low    Close
#1   2007-01-02 50.03978 50.11778 49.95041 50.11778
#2   2007-01-03 50.23050 50.42188 50.23050 50.39767
#3   2007-01-04 50.42096 50.42096 50.26414 50.33236
#4   2007-01-05 50.37347 50.37347 50.22103 50.33459
#5   2007-01-06 50.24433 50.24433 50.11121 50.18112
#6   2007-01-07 50.13211 50.21561 49.99185 49.99185
#...
#...

数据

data(sample_matrix)
sample.xts <- as.xts(sample_matrix, descr='my new xts object')

我们假设问题是在最后的注释中询问如何绘制xts对象,例如x。

zoo 和 xts 对象有很多绘图函数(每个 xts 对象也是一个 zoo 对象),因此没有必要将其转换为数据框(尽管在下面的最后一个示例中我们展示了这一点。)这些绘图系统的所有功能在使用时都可用。下面还显示了如何在每种情况下指定 x 标签。

library(xts)  # this also pulls in zoo

# classic graphics
plot(as.zoo(x), xlab = "Time")

# lattice graphics
library(lattice)
xyplot(x, xlab = "Time")

## ggplot2 graphics
library(ggplot2)
autoplot(x) + xlab("Time")

# convert to data frame and then use matplot
d <- fortify.zoo(x)
matplot(d[[1]], d[-1], xlab = "Time")

备注

Lines <- "                 Elapsed Time  Total Inflow  Total Evap  Surface Infil
    2021-04-30 10:02:00        0.033            0      0.125             0
    2021-04-30 10:04:00        0.067            0      0.125             0
    2021-04-30 10:06:00        0.100            0      0.125             0
    2021-04-30 10:08:00        0.133            0      0.125             0
    2021-04-30 10:10:00        0.167            0      0.125             0
    2021-04-30 10:12:00        0.200            0      0.125             0"

# split into lines, trim whitespace off ends, replace 2+ spaces w comma
L <- Lines |>
  textConnection() |>
  readLines() |>
  trimws() |>
  gsub(pattern = "  +", replacement = ",")

z <- read.csv.zoo(text = L, index = 0, tz = "", check.names = FALSE)
x <- as.xts(z)