[英]How to convert a data.frame table to an xts object
我從 Thomson Reuters Datastream 下載價格數據到 excel 並創建了一個 csv 文件。 生成的 csv 文件是 data.frame object。 我已經使用as.date
function 將日期列設置為date
。 結果表是一個有 42 列的data.frame
,第一列是date
列,另外 41 列是不同公司的價格數據。 價格數據的 class 是'numeric'
。 該表如下所示:
date TickerA TickerB TickerC
1 2000-01-03 20 NA 40
2 2000-01-04 21 33 42
3 2000-01-05 22 32 NA
4 .
5 .
6 .
請注意,由於一些公司已經破產或在觀察期后期成立,因此缺少一些價格。 現在,我想使用 PerformanceAnalytics package 中的 Return.calculate function,它將價格表轉換為收益表,如下所示:
date TickerA TickerB TickerC
1 2000-01-03 NA NA NA
2 2000-01-04 0.049 NA 0.049
3 2000-01-05 0.047 -0.031 NA
4 .
5 .
6 .
到目前為止的代碼如下所示:
test <- read.csv("data.csv")
date <- as.Date(test$Date, format = "%m/%d/%Y")
data <- cbind(date, test[,-1])
當我嘗試應用 Return.calculate function 時,會發生這種情況:
returns <- Return.calculate(data, method = 'log')
'Error in checkData(prices, method = 'xts'): the data cannot be converted into a time series. If you are trying to pass in names from a data object with one column, you should use the form 'data[rows, columns, drop = FALSE]'. Rownames should have standard date formats, such as '1985-03-15'.'
當我嘗試將data
轉換為 xts object 時,會出現:
xtsdata <- xts(data, order.by = data$date)
'Error in xts(data, order.by = data$date): 'order.by' cannot contain 'NA', 'NaN', or 'Inf'.'
我不明白這一點,因為我的 date 列是date
類型,而我的 price 列是numeric
類型。 簡而言之,我認為如果我可以將表格轉換為 xts object,我的問題就可以解決。 有人知道桌子的問題可能是什么嗎? 我很感激每一個提示,有一個好的:)
假設您擁有的內容與這些工作中的任何一項末尾的注釋中一樣:
library(xts)
# 1
z <- read.csv.zoo("data.csv", format = "%m/%d/%Y")
x <- as.xts(z)
# 2
DF <- read.csv("data.csv")
z <- read.zoo(DF, format = "%m/%d/%Y")
x <- as.xts(z)
# Calculate returns
library(PerformanceAnalytics)
Return.calculate(x, method = 'log')
## TickerA TickerB TickerC
## 2000-01-03 NA NA NA
## 2000-01-04 0.04879016 NA 0.04879016
## 2000-01-05 0.04652002 -0.03077166 NA
Lines <- "date,TickerA,TickerB,TickerC
01/03/2000,20,,40
01/04/2000,21,33,42
01/05/2000,22,32,
"
cat(Lines, file = "data.csv")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.