问题
I have the following data set
data
date PX_LAST.USGG10YR Index PX_LAST.GSWISS10 Index
1 2012-12-31 1.7574 0.526
2 2013-01-31 1.9849 0.789
3 2013-02-28 1.8756 0.698
4 2013-03-29 1.8486 0.716
5 2013-04-30 1.6717 0.570
6 2013-05-31 2.1282 0.722
7 2013-06-28 2.4857 1.027
8 2013-07-31 2.5762 1.023
9 2013-08-30 2.7839 1.069
10 2013-09-30 2.6100 1.021
The class of the date column is
> class(data[,1])
[1] "POSIXct" "POSIXt"
The class of the other two columns is
class(data[,2]) [1] "numeric" class(data[,3]) [1] "numeric"
I am now converting this to its with
df2=xts(data,order.by=data$date)
The result is
structure(c("2012-12-31", "2013-01-31", "2013-02-28", "2013-03-29",
"2013-04-30", "2013-05-31", "2013-06-28", "2013-07-31", "2013-08-30",
"2013-09-30", "1.7574", "1.9849", "1.8756", "1.8486", "1.6717",
"2.1282", "2.4857", "2.5762", "2.7839", "2.61", "0.526", "0.789",
"0.698", "0.716", "0.57", "0.722", "1.027", "1.023", "1.069",
"1.021"), .Dim = c(10L, 3L), .Dimnames = list(NULL, c("date",
"PX_LAST.USGG10YR Index", "PX_LAST.GSWISS10 Index")), index = structure(c(1356912000,
1359590400, 1362009600, 1364515200, 1367280000, 1369958400, 1372377600,
1375228800, 1377820800, 1380499200), tzone = "UTC", tclass = c("POSIXct",
"POSIXt")), .indexCLASS = c("POSIXct", "POSIXt"), tclass = c("POSIXct",
"POSIXt"), .indexTZ = "UTC", tzone = "UTC", class = c("xts",
"zoo"))
Looking at the result, I get
> typeof(df2)
[1] "character"
Clearly, I cannot use this for calculations (such as Return.calculate). When I try to convert columns 2 and 3 with as.numeric(df2[,2]), it remains as type 'character'. Can somebody help me to find a code which does convert this to a proper xts (i.e. columns 2 and 3 are of type 'double'), i.e. the structure of df2 is like in this example
library(quantmod)
getSymbols('AAA',src='FRED')
class(AAA)
typeof(AAA)
> class(AAA)
[1] "xts" "zoo"
> typeof(AAA)
[1] "double
Regards Andreas
回答1:
You included the date
column in the xts data, so R converted your data.frame into a matrix using the type that wouldn't lose any information (character). There's no need to have the date
column as the xts index and in the data, so just omit that column when you call xts()
.
df2 <- xts(data[,-1], order.by=data$date)
来源:https://stackoverflow.com/questions/19384353/conversion-to-xts-does-not-work-because-data-is-of-type-character-and-cannot-b