问题描述
我正在使用R。我有一些值和日期时间索引。我想将小标题转换为xts。
这里是示例数据和我使用的代码:
Date <- c("2010-01-04","2010-01-04")
Time <- c("04:00:00","06:00:00")
value <- c(1,2)
df <- as_tibble(value) %>% add_column(Date = Date,Time = Time)
df <- df %>% mutate(datetime = as.POSIXct(paste(Date,Time),format="%Y-%m-%d %H:%M:%s"))
library(xts)
dfxts <- as.xts(df[,1],order.by=df[,4])
尽管如此,我仍然遇到以下错误:
Error in xts(x,order.by = order.by,frequency = frequency,...) :
order.by requires an appropriate time-based object
有什么想法在推动这一趋势吗?日期时间应该是一个适当的基于时间的对象。非常感谢。
解决方法
order_by
的参数必须是向量。当您使用tbl_df
从foo[,bar]
中提取内容时,返回的对象的类别不是向量,而是tbl_df
。使用df[[4]]
。
您应该重新检查每个步骤,然后检查您得到了什么。实际上,我发现在 one 容器中最简单的方法。您可以使用tbl
,我碰巧喜欢data.frame
。
因此,让我们首先根据您的数据构建一个data.frame
:
R> Date <- c("2010-01-04","2010-01-04")
R> Time <- c("04:00:00","06:00:00")
R> value <- c(1,2)
R> df <- data.frame(Date=Date,Time=Time,value=value)
R> df
Date Time value
1 2010-01-04 04:00:00 1
2 2010-01-04 06:00:00 2
R>
然后整理并解析日期和时间信息并进行检查:
R> df[,"pt"] <- as.POSIXct(paste(Date,Time))
R> df
Date Time value pt
1 2010-01-04 04:00:00 1 2010-01-04 04:00:00
2 2010-01-04 06:00:00 2 2010-01-04 06:00:00
R>
此后,只需调用具有正确组件的xts
:
R> x <- xts(df[,"value"],order.by=df[,"pt"])
R> x
[,1]
2010-01-04 04:00:00 1
2010-01-04 06:00:00 2
R>
编辑或者您可以一步一步完成而没有任何其他软件包,但放弃了逐步执行以下中间步骤的能力:
R> x2 <- xts(value,order.by=as.POSIXct(paste(Date,Time)))
R> x2
V1
2010-01-04 04:00:00 1
2010-01-04 06:00:00 2
R> all.equal(x,x2)
[1] TRUE
R>