2014-01-27 7 views
0

Я попытался интегрировать привязку xts в свой фрейм данных, но я не знаю, как это сделать, ниже приведен пример ошибки, с которой я сталкиваюсь.Как поместить столбцы 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*, "Открыть", значение = с (50.0397819115463,: замена имеет 180 строк, данных имеет 0

Для 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». Поэтому я выбираю «Другой способ», сначала создаю фрейм данных, который я хочу, затем вставляю данные или, может быть, у вас есть лучшее решение?

ответ

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 

Обратите внимание на разницу в именах строк с последней опцией.

EDIT (Ответ на добавление 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].

+0

Я обновил свой вопрос, вы можете мне помочь? – ChaoYang

+0

Спасибо, ваши методы работают. – ChaoYang

+0

Вы можете найти обмен [здесь] (http://www.stackoverflow.com/questions/21413322/) забавный. Оказывается, эта задача по настройке имен столбцов в вызове 'data.frame (...)' не так проста ... – jlhoward

1

data не имеет ни одной строки, так что вы должны указать их:

data[1:nrow(xtsObject[,"Open"]) ,"Open"] <- xtsObject[,"Open"] 
+0

Спасибо, проблема решена – ChaoYang

Смежные вопросы