2012-08-22 69 views
2

我如何從一個表是這樣的的:性能重塑表

ID Day car_id value 
    1 1 1  0 
    1 1 2  4 
    1 2 1  1 
    1 3 2  0 
    2 1 3  0 
    2 2 3  2 
    2 3 3  0 
    ... 

爲了一個這樣的嗎?我已經嘗試從包reshape2使用dcast。它工作正常,但由於數據集非常大,速度有點慢。還有另一種更快的方法嗎?

ID Day c_id1 c_id2 c_id3 
    1 1 0  4 0 
    1 2 1  0 0 
    1 3 0  0 0 
    2 1 0  0 0 
    2 2 0  0 3 
    2 3 0  0 0 

謝謝!

+3

爲什麼要重塑?如果您擔心效率問題,我建議您避免重新塑形。 – Roland

回答

6

基數R中的函數reshape()非常快,代價是難以理解參數的含義。

reshape(dat, idvar=c("ID", "Day"), timevar="car_id", direction="wide") 
    ID Day value.1 value.2 value.3 
1 1 1  0  4  NA 
3 1 2  1  NA  NA 
4 1 3  NA  0  NA 
5 2 1  NA  NA  0 
6 2 2  NA  NA  2 
7 2 3  NA  NA  0 
0

另一種方法是使用reshape2軟件包中的dcast函數。

dcast(dat, ID + Day ~ car_id, value.var = 'value')