将数据帧转换为xts

时间:2010-11-28 14:32:10

标签: r dataframe coerce xts time-series

我正在尝试使用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

这是我能想到的最简单的例子,所以如果没有让它发挥作用是非常令人沮丧的......任何帮助都表示赞赏!

9 个答案:

答案 0 :(得分:72)

这清楚地记录了--- xtszoo个对象是通过提供两个参数,vectormatrix携带数据而形成的和DatePOSIXctchron,...提供时间信息的类型(或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)

为我工作。