我很好奇无论解释性如何,以长格式还是宽格式存储数据是否更有效?我已经使用object.size()
来确定内存中的大小,但它们没有显着差异(长度在大小方面稍微有点效率),而且值只是估计值。
除了原始大小之外,我还想知道在建模时使用哪种格式更有效。
答案 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也是如此。改变矩阵的形状仅仅是为了大多数情况分配维度属性。
如果您要以某种方式对数据进行分类并添加其他信息,那么广泛通常会更有效地存储,但通常会更长时间地处理。这不是长格式的必要属性,它的空间效率较低,但通常您会在列名称中有一个复合变量描述,它将被分隔并给定一个新列,或多个列。因此,由于这些冗余,它将占用更多空间。在处理方面,与具有多变量列指定的宽格式相比,更容易聚合长数据或选择要删除的特定情况。
如果数据不是完全矩形(或立方体等),那么长也是最好的方法(这两个)。