2014-05-16 30 views
1

我有一個文件格式在下面(注意:忽略每行之間的空行,我插入它,因此它被正確格式化爲文章)R讀取非標準文件的R時間序列和數據幀對象

MSFT Equity,2014-03-03,23.5,42.3,2014-03-04,23.6,42.5,...

INTC Equity,2014-03-03,23.5,42.3 ,2014-03-04,23.6,42.5,..........

AAPL Equity,2014-03-03,23.5,42.3,2014-03-04,23.6,42.5,.. ........ 。 。 。

在每一行中,第一列代表ticker。然後它有日期,然後有兩個數據點在很多日期重複。根據開始日期,行的長度可以非常長,以千爲單位。行數可以以數百個爲單位,取決於代號的數量。

理想情況下,我想爲每行創建一個數據框,其中日期爲索引,兩個數據點爲兩列。然後,我可以有一個數據框列表作爲列表的索引。或者,代替數據框,每行兩個數據點中的每一個的兩個時間序列對象也可以工作。

任何幫助實施這種有效率將不勝感激。我的實現的僞代碼可能效率不高,在處理非常大的文件時可能會使計算機停止運行。

1) rf <- read.csv(infl, header = FALSE, sep = ",", quote = "", 
    dec = ".", fill = FALSE, comment.char = "") 
    2) Read each row and each comma seperated data 
    3) Then create xts object for each date and data point pair and use rbind to build the full timeseries for each row and for each of the two data points. 
     e.g. datapt1 <- xts(price1,dt) (e.g.2014-03-03, 23.5) 
      datapt2 <- xts(price2,dt) (e.g. 2014-03-03, 42.3) 
      fullxts1 <- rbind(fullxts1,datapt1) # 
      fullxts2 <- rbind(fullxts2,datapt2) 
    4) create a dataframe for each row by utilizing two xts object created above. 
    5) create a list object with ticker as index and dataframe as the element. 

我希望我對上述問題的描述很清楚。在此先感謝幫助

+0

你寫的「然後它有日期,然後有兩個數據點重複自己的許多日期」。你的意思是所有的代理人你有相同的2個數據點,就像你上面的例子嗎?如果是的話,爲什麼要打擾所有的如果他們都是相同的除了股票嗎? – hvollmeier

+0

你好,當我爲帖子手動創建樣本文件格式時,我沒有注意這些值。在實際的文件中,每個日期和每個日期的值是不同的row。 – Muk

回答

0

我不能告訴你是否要xts對象在最後或沒有。但是這裏有一種可能讀取數據的方法。

dd<-read.table(text="MSFT Equity, 2014-03-03, 23.5, 42.3, 2014-03-04, 23.6, 42.5 
INTC Equity, 2014-03-03, 23.5, 42.3, 2014-03-04, 23.6, 42.5 
AAPL Equity, 2014-03-03, 23.5, 42.3, 2014-03-04, 23.6, 42.5", sep=",") 

ticker<-rep(dd[,1], (ncol(dd)-1)/3) 
datevals<-as.Date(unlist(dd[, seq(2, ncol(dd), by=3)])) 
var1vals<-unlist(dd[, seq(3, ncol(dd), by=3)]) 
var2vals<-unlist(dd[, seq(3, ncol(dd), by=3)]) 
dd<-data.frame(ticker, datevals, var1vals, var2vals) 

xtslist <- by(dd, dd$ticker, function(x) xts(x[,3:4], order.by=x[,2])) 

這裏xtslist是(「通過」,所以它打印有點滑稽的類別)與對應於每個行的XTS物體的每個元素的列表。

+0

棒極了!!謝謝!!!這正是我所需要的。 – Muk

+0

SUPERB !!!謝謝!!!這正是我所需要的,它的作用就像是一種魅力,你爲我節省了很多時間!爲了創建數據框的列表,我添加了這一行dflist < - by(dd,dd $ ticker,function(x)data.frame(row.names = x [,2],x [,3:4])))。它工作。我使用row.names來創建索引。是否有指定co lumn的名字在同一行?目前col名稱默認爲「var1vals」和「var2vals」,而索引col名稱爲null。如果這是不可能的,那麼我必須使用colnames(dflist)[「oldname」] < - 「newName」。再次感謝你。 – Muk

+0

@Muk var1vals和var2vals列名來自我用來製作data.frame的變量。只要改變這些名字。 – MrFlick