2017-08-02 52 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)