将data.frame转换为xts对象并保留类型

5

你能提供一下你想转换的 data.frame 对象的一个小样本吗? - Joshua Ulrich
2个回答

7

不行,你不能这样做。xts / zoo对象是带有索引属性的矩阵,您不能在矩阵中混合类型。

我们考虑创建一个xts-data.frame类,但xts的主要关注点是速度和内存效率。data.frames不是速度和内存有效,因此这不是优先考虑的问题。


那么输入的data.frame只是转换为一个矩阵?也许我没有理解xts的重点(我是这个对象的新手)。当我想到时间序列数据时,我会想到一个包含以下列的表:日期、特征1、特征2...其中日期是日期/时间,而特征1...则是你正在测量的任何数字或类别或缺失。 - Suraj
xts对象的“日期”不是矩阵中的列,而是附加到它上面的属性。您所有的“特征”必须是相同的类型。 - Joshua Ulrich
1
根据您对xts-data.frame的评论,我认为这是一个好主意。如果用户需要一个data.frame,那么他/她应该接受速度和内存的代价。就我个人而言,速度/内存对于我处理的问题类型并不是问题——我在很多地方都使用data.frame,因为它更自然地表示了我处理的数据类型。为了获得xts/zoo提供的所有好处,我很乐意支付速度/内存的代价。 - Suraj
2
我认为这也是个好主意,但我并不需要它... 所以我没有太大的动力去编写它。;-) - Joshua Ulrich
完全理解 =)无论如何,在数据框案例中,xts仍然很有用 - 也许我不能创建单个xts对象,但是在需要xts / zoo辅助函数(如na.approx)的地方,我总是可以将我的数据框子集化为数字。 - Suraj
@SFun28,na.approx对于非数值数据没有意义,许多其他时间序列操作也是如此。 - G. Grothendieck

4

我也曾遇到过同样的问题,我的解决方法是在指定数据对象时不包括时间列。只要所有其他列的类型相同,就不应该出现问题。

即:

data <- xts(data[,2:6], order.by = data$time, unique = FALSE, tzone = "")

(data$time 是第一列且为 POSIXct 格式,我将其排除在外。其他所有列均为数字)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接