我试图将xts数据集成到我的数据框中,但我不知道该怎么做,下面是我遇到的错误的一个例子。
library(xts)
data(sample_matrix)
xtsObject=as.xts(sample_matrix)
#load xts and build in data sample_matrix
data=data.frame(Open=numeric(),
High=numeric(),
Low=numeric(),
Close=numeric())
#create an empty data frame
data[,"Open"]=xtsObject[,"Open"]
#put data in(encounter error)
错误代码:
[<-.data.frame
中的错误(*tmp*
,,“打开”,值= c(50.0397819115463,:
替换有180行,数据有0
to jihoward:你是对的,但我想在构建数据框时设置列名。 我没有得到我想要的列名,例如
xtsObject=as.xts(sample_matrix)
data <- data.frame("colnames"=xtsObject$Open)
head(data)
# Open
#2007-01-02 50.03978
#2007-01-03 50.23050
...
在此示例中,我想要的列名称是“colnames”,但它更改为“Open”。所以我选择“另一种方式”,首先构建我想要的数据框,然后将数据放入,或者你可能有更好的解决方案?
答案 0 :(得分:2)
除非我遗漏了某些东西,否则你做的工作远远超过必要的工作。
# convert to data.frame
data <- data.frame(xtsObject)
head(data)
# Open High Low Close
# 2007-01-02 50.03978 50.11778 49.95041 50.11778
# 2007-01-03 50.23050 50.42188 50.23050 50.39767
# 2007-01-04 50.42096 50.42096 50.26414 50.33236
# 2007-01-05 50.37347 50.37347 50.22103 50.33459
# 2007-01-06 50.24433 50.24433 50.11121 50.18112
# 2007-01-07 50.13211 50.21561 49.99185 49.99185
# only one column
data <- data.frame(xtsObject$Open)
head(data)
# Open
# 2007-01-02 50.03978
# 2007-01-03 50.23050
# 2007-01-04 50.42096
# 2007-01-05 50.37347
# 2007-01-06 50.24433
# 2007-01-07 50.13211
# Another way
data <- data.frame(Open=numeric(), High=numeric(), Low=numeric(), Close=numeric())
data[1:nrow(xtsObject[,"Open"]) ,"Open"] <- xtsObject[,"Open"]
head(data)
# Open High Low Close
# 1 50.03978 NA NA NA
# 2 50.23050 NA NA NA
# 3 50.42096 NA NA NA
# 4 50.37347 NA NA NA
# 5 50.24433 NA NA NA
# 6 50.13211 NA NA NA
注意行名称与最后一个选项的区别。
编辑(对OP的附录的回应)
您可以在之后设置列名称;这可能是最直接的。
data <- data.frame(xtsObject$Open)
colnames(data) <- "colname"
或者,你可以这样做:
data <- data.frame(colname=as.data.frame(xtsObject)$Open)
如果列名Open
实际存储在变量中,那么您可以使用:
openCol <- "Open"
data <- data.frame(colname=as.data.frame(xtsObject)[[openCol]])
请注意使用[[openCol]]
和不 [openCol]
。
答案 1 :(得分:1)
data
没有行,因此您必须指定它们:
data[1:nrow(xtsObject[,"Open"]) ,"Open"] <- xtsObject[,"Open"]