簡體   English   中英

如何將 data.frame 表轉換為 xts object

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM