2017-08-02 58 views
0

我在裏面有一個data.frame,它由兩列組成,Sample_ID變量和一個值變量。每個樣本(其中有1971年)都有132個獨立點。整個對象只有〜3000000字節,或大約0.003千兆字節(根據object.size())。出於某種原因,當我嘗試將對象廣播爲寬格式時,它會拋出一個錯誤,指出它無法分配3.3 GB大小的矢量,這比原始對象大3個數量級。dcast物體的數量級比原始物體的數量級要大

我期望的輸出是每個樣品1列,每列有132行數據。

我使用的dcast代碼如下:

df_dcast = dcast(df, value.var = "Vals", Vals~Sample_ID) 

我將提供數據集的再現,而是因爲這個問題與物體的大小做的,我不認爲它的一個子集,將有助於我不確定如何輕鬆發佈完整的數據集。如果您知道如何發佈整個數據集或認爲某個子集會有幫助,請告訴我。

謝謝

+0

可能是值得考慮的稀疏矩陣。 –

+0

@RichardTelford從我的第一眼看來,如果您的數據幾乎爲零,並且我的數據根本就沒有零,那麼備用矩陣效率會更低,所以我認爲這些效率會更低?但是我覺得這裏還有其他事情發生,因爲我不能想到爲什麼具有完全相同數據的廣泛對象應該比長對象大得多。我的假設是,我正在使用的dcast代碼正在做的事情不是我想要它做的事情,我只是無法分辨,因爲在它完成之前它正在拋出並出錯。我現在要嘗試一個子集,看看它做了什麼。 –

回答

0

好吧我想通了出什麼事了。它試圖使用Vals列中的每個唯一值作爲單獨的行,產生比我想要的更多的行,所以我需要添加一個新的列,該列基本上是從1:132開始的值索引,因此數據幀有3列:ID,瓦爾斯,ValsNumber

然後dcast代碼如下所示:

df_wide = dcast(df, value.var = "Vals", ValsNumber ~ Sample_ID)