我只是好奇,不管解释如何,以长格式或宽格式存储数据是否更有效?我曾经object.size()
确定内存中的大小,但它们没有显着差异(长在大小方面效率稍高),并且该值仅是估计值。
除了原始大小之外,我还想知道哪种格式在用于建模时更有效地被操纵。
我只是好奇,不管解释如何,以长格式或宽格式存储数据是否更有效?我曾经object.size()
确定内存中的大小,但它们没有显着差异(长在大小方面效率稍高),并且该值仅是估计值。
除了原始大小之外,我还想知道哪种格式在用于建模时更有效地被操纵。
两个不同的es的内存使用matrix
应该是一样的:
> object.size(long <- matrix(seq(10000), nrow = 1000))
40200 bytes
> object.size(square <- matrix(seq(10000), nrow = 100))
40200 bytes
效率上的任何差异都会因使用 R 的低效率而相形见绌,因此即使它们是可测量的,也几乎不需要考虑。
a 的情况非常不同data.frame
,因为它是作为 a list
of vector
s 实现的:
> object.size(as.data.frame(long))
41704 bytes
> object.size(as.data.frame(square))
50968 bytes
这样做的时间效率将取决于您到底想做什么。
对于矩阵,绝对没有区别。该矩阵的 data.frame 也是如此。改变矩阵的形状只是分配维度属性......在大多数情况下。
如果您打算以某种方式对该数据进行分类并添加其他信息,那么宽通常会更有效地存储,但通常会更有效地处理长。这不是长格式的必要属性,因为它的空间效率较低,但通常您会在宽列名称中有一个复合变量描述,它将被分隔并给出一个新列,或者长列中的多个列。因此,由于这些冗余,它将占用更多空间。在处理方面,聚合长数据或选择删除特定案例比使用具有多变量列名称的宽格式更容易。
如果数据不是完美的矩形(或立方体等),Long 也是最好的方法(这两者中的)。