2014-02-12 90 views
1

我想創建一個data.frame(我知道矩陣會更快,但我需要一個data.frame),但它需要很長時間(超過30分鐘)。我確信有比我已經嘗試過的更好的方法。矢量化數據框的創建?

我有一個大對象(好吧,在磁盤上之前沒有那麼大〜= 100MB大小read.csv())是這樣的:

  Date City V3 V4 
1 2008-12-30 NewYork 15 54 
2 2008-12-31 NewYork 16 34 
[...] 
4001 2008-12-30 London 12 12 
4002 2008-12-31 London 16 44 
[...] 
9001 2008-12-30 Madrid 26 54 
9002 2008-12-31 Madrid 64 23 

...可以想象很多城市(更超過500)和很多日期(20年的日常數據,但有時在不規則的時間序列中(也就是說,馬德里可能是唯一在2001-01-01有意見的城市))。

我要的是一個data.frame安排他們,使該行的名稱將是日期和列名的城市名稱,像這樣的:

  NewYorkV3 LondonV3 MadridV3 
2008-12-30   15  12  26 
2008-12-31   16  16  64 

我已經試過(欲蓋彌彰最終對象的增長)是:

uniqs <- unique(city.data[ ,2]) 

city.list <- vector('list', length(uniqs)) 

for (i in 1:length(uniqs)) { 
city.list[[i]] <- subset(city.data, City==as.character(uniqs[i]))[ ,3] 
} 

city.df <- do.call('cbind', city.list) 

我確定有一種更有效的方法,但是這是什麼?

我可以加載對象爲xts嗎?怎麼樣?我遇到了我無法理解的錯誤... Can Dates的列可以具有相同的值嗎?

我可以融化並重塑物體嗎?怎麼樣? (再次出錯)

謝謝!

回答

3

您可能也有興趣使用data.tabledcast.data.table延伸reshape2

這需要data.table版本1.8.11(從R-鍛)

library(reshape2) 
library(data.table) 

dcast(x, Date ~ City, value.var = 'V3') 
2

reshape作品這樣的:

reshape(x, direction="wide", timevar="City", idvar="Date") 
     Date V3.NewYork V4.NewYork V3.London V4.London V3.Madrid V4.Madrid 
1 2008-12-30   15   54  12  12  26  54 
2 2008-12-31   16   34  16  44  64  23 
0

你們很快。

我有一些問題與日期列,但我沒有

current.city.data$V1 <- as.character(current.city.data$V1) 

,一切都解決了,然後(也可以做到這一點,而無論如何讀它)

謝謝。