我正在使用dataframe创建一个xts。创建xts,但所有值(xts中的索引除外)都在引号内。这导致我不能使用数据,因为许多函数,如sum,都不能工作。
有什么想法吗?我怎样才能得到没有报价的xts?
下面是我更新的代码,因为我对dataframes/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发布于 2016-10-04 15:37:19
您需要认识到,将数据存储在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 (在x参数的xts中),就会遇到这样的问题。
您的问题可以按以下方式解决( wici在评论中已经说明了什么)
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"发布于 2022-09-18 14:51:34
日期部分应该在索引中,而不是数据的一部分。read.zoo会为你制作一个动物园物体。然后,如果需要xts,您可以将其转换为xts。
library(xts)
as.xts(read.zoo(mydf3))
## plus minus
## 2013-12-10 4 -1
## 2015-04-01 3 -2
## 2016-01-03 2 -4https://stackoverflow.com/questions/39855315
复制相似问题