我正在尝试使用as.xts()方法将数据框转换为xts对象。这是我的输入数据帧q:
q
t x
1 2006-01-01 00:00:00 1
2 2006-01-01 01:00:00 2
3 2006-01-01 02:00:00 3
str(q)
'data.frame': 10 obs. of 2 variables:
$ t: POSIXct, format: "2006-01-01 00:00:00" "2006-01-01 01:00:00" "2006-01-01 02:00:00" "2006-01-01 03:00:00" ...
$ x: int 1 2 3 4 5 6 7 8 9 10
结果是:
> as.xts(q)
Error in as.POSIXlt.character(x, tz, ...) :
character string is not in a standard unambiguous format
这是我能想到的最简单的例子,所以如果没有让它发挥作用是非常令人沮丧的......任何帮助都表示赞赏!
答案 0 :(得分:72)
这清楚地记录了--- xts和zoo个对象是通过提供两个参数,vector
或matrix
携带数据而形成的和Date
,POSIXct
,chron
,...提供时间信息的类型(或zoo订购的情况)。
所以做一些像
这样的事情 qxts <- xts(q[,-1], order.by=q[,1])
你应该被设置。
答案 1 :(得分:18)
嗯,as.xts默认假定日期存储在data.frame的rownames中。因此错误消息。一个快速而肮脏的解决方案是:
rownames(q) = q[1]
as.xts(q)
但是你得到一个带有日期字符串的额外列。理想情况下,您将构建data.frame,并将日期作为开头的rownames。
答案 2 :(得分:6)
这是一个使用tidyquant
包的解决方案,它包含一个函数as_xts()
,它将数据帧强制转换为xts对象。它还包含as_tibble()
来强制xts对象到tibbles(“整洁”的数据帧)。
重新创建数据框(请注意,日期时间类用于“整洁”数据框,但可以使用任何明确的日期或日期时间类):
> q
# A tibble: 3 × 2
t x
<dttm> <dbl>
1 2006-01-01 00:00:00 1
2 2006-01-01 01:00:00 2
3 2006-01-01 02:00:00 3
使用as_xts()
转换为“xts”类。指定参数date_col = t
,将“t”列指定为用作行名称的日期:
> library(tidyquant)
> as_xts(q, date_col = t)
x
2006-01-01 00:00:00 1
2006-01-01 01:00:00 2
2006-01-01 02:00:00 3
返回是一个xts
对象,其正确的日期或日期时间为行名。
答案 3 :(得分:0)
这是一个可行的解决方案:
library(timetk)
q <- xts::xts(q[,-1], order.by = q$t)
答案 4 :(得分:0)
我定义了一个索引,其长度等于小标题的行数。仅在分别定义了时间序列后,如示例所示:
ti= seq(from = ymd_hm("2000-01-01 00:00"),
to = ymd_hm("2000-01-02 01:00"), by = "30 min", tz = "UTC")
tbl <- tibble(t =ti,
x = 1:length(t))
)
此代码有效:
xts.tbl <- xts(tbl[,-1], order.by = ti)
但是所有数据都转换为字符。
答案 5 :(得分:0)
现在看来它不起作用的原因很明显,xts不接受小标题,即使选择了列,它们仍然存储为小标题。可以将核心数据转换为矩阵或向量,以下代码有效:
cognitoResult
答案 6 :(得分:0)
尝试以下
q$t<-as.xts(q, order.by = as.Date(q$t), dateFormat="POSIXct")
答案 7 :(得分:0)
一个简单的解决方案是首先将 _context.Product.ToList();
转换为data.frame
:
data.table
答案 8 :(得分:0)
您只需执行以下操作
qxts <- xts(q[,2],q$t)
为我工作。