【问题标题】:R - converting dataframe to xts adds quotations (in xts)R - 将数据帧转换为 xts 添加引号(在 xts 中)
【发布时间】:2017-02-12 19:08:34
【问题描述】:

我正在使用数据框来创建 xts。 xts 被创建,但所有值(xts 中的索引除外)都在引号内。这导致我无法使用数据,因为 sum 等许多函数不起作用。

任何想法如何在没有引号的情况下生成 xts?

这是我的代码 [由于数据帧/xts 名称不一致的评论而更新]:

# creates a dataframe with dates and currency
mydf3 <- data.frame(date = c("2013-12-10", "2015-04-01", 
"2016-01-03"), plus = c(4, 3, 2), minus = c(-1, -2, -4))
# transforms the column date to date-format
mydf3 = transform(mydf3,date=as.Date(as.character(date),format='%Y-%m-%d'))
# creates the xts, based on the dataframe mydf3
myxts3 <- xts(mydf3, order.by = mydf3$date)
# removes the column date, since date is now stored as index in the xts
myxts3$date <- NULL

【问题讨论】:

  • 这对您有帮助吗? t = transform(mydf3,date2=as.Date(mydf3$date,format='%Y-%m-%d')); myxts3 &lt;- xts(t, order.by = t$date2)
  • 你的变量名不一致。试试myxts3&lt;-xts(t[,-1],order.by = t$date)

标签: r xts


【解决方案1】:

您需要意识到将数据存储在 xts 对象中的底层数据结构是一个 R 矩阵对象,它只能是一种 R 类型(例如,全数字或全字符)。时间戳存储为单独的向量(在本例中为您的日期列),用于按时间索引/子集数据。

问题的原因是您的 date 列强制数据矩阵转换为字符类型矩阵(在 xts 对象中)而不是数字。似乎date 类在包含在矩阵中时会转换为字符:

> as.matrix(mydf3)
     date         plus minus
[1,] "2013-12-10" "4"  "-1" 
[2,] "2015-04-01" "3"  "-2" 
[3,] "2016-01-03" "2"  "-4" 

任何时候,当您转换为 xts 的数据中包含非数字数据时(在 xtsx 参数中),您都会遇到此类问题。

您的问题可以通过以下方式解决(wici 已在 cmets 中显示)

myxts3 <- xts(x= mydf3[, c("plus", "minus")], order.by = mydf3[, "date"])

> coredata(myxts3)
plus minus
[1,]    4    -1
[2,]    3    -2
[3,]    2    -4
> class(coredata(myxts3))
[1] "matrix"

【讨论】:

  • 谢谢,现在可以使用了。我确实使用数据框作为起点,似乎我应该使用矩阵作为起点,而不是混合数字和字符。现在,当这个工作正常时,我对 zoo 进行了一些进一步的测试,因为在某些情况下,我需要同时包含字符和数字的数据(并且有可能使用诸如“last”之类的一些函数来利用事实上的日期被索引)。
猜你喜欢
  • 2014-09-25
  • 1970-01-01
  • 2016-01-07
  • 2013-12-10
  • 2017-10-30
  • 2011-05-27
  • 2011-05-16
  • 1970-01-01
  • 2020-07-17
相关资源
最近更新 更多