宽格式或长格式数据是否更有效?

时间:2011-11-18 10:37:12

标签: r matrix dataframe memory-efficient

我很好奇无论解释性如何,以长格式还是宽格式存储数据是否更有效?我已经使用object.size()来确定内存中的大小,但它们没有显着差异(长度在大小方面稍微有点效率),而且值只是估计值。

除了原始大小之外,我还想知道在建模时使用哪种格式更有效。

2 个答案:

答案 0 :(得分:6)

两个不同的matrix es的内存使用量应该相同:

> object.size(long <- matrix(seq(10000), nrow = 1000))
40200 bytes
> object.size(square <- matrix(seq(10000), nrow = 100))
40200 bytes

效率的任何差异都会因使用R的效率低而相形见绌,所以如果它们甚至可以衡量的话,几乎不需要考虑。

data.frame的情况非常不同,因为它是list vector的实现:

> object.size(as.data.frame(long))
41704 bytes
> object.size(as.data.frame(square))
50968 bytes

时间效率取决于你想要做什么。

答案 1 :(得分:1)

对于矩阵,绝对没有区别。对于该矩阵的data.frame也是如此。改变矩阵的形状仅仅是为了大多数情况分配维度属性。

如果您要以某种方式对数据进行分类并添加其他信息,那么广泛通常会更有效地存储,但通常会更长时间地处理。这不是长格式的必要属性,它的空间效率较低,但通常您会在列名称中有一个复合变量描述,它将被分隔并给定一个新列,或多个列。因此,由于这些冗余,它将占用更多空间。在处理方面,与具有多变量列指定的宽格式相比,更容易聚合长数据或选择要删除的特定情况。

如果数据不是完全矩形(或立方体等),那么长也是最好的方法(这两个)。