【问题标题】:Is the wide or long format data more efficient?宽格式数据还是长格式数据更有效?
【发布时间】:2012-01-01 03:17:40
【问题描述】:

我只是好奇,不管解释如何,以长格式或宽格式存储数据是否更有效?我已经使用object.size() 来确定内存中的大小,但它们并没有显着差异(long 在大小方面稍微更有效),并且该值只是估计值。

除了原始大小之外,我还想知道哪种格式在用于建模时更容易被操纵。

【问题讨论】:

  • 换一种方式问,对 1000 * 10 或 100 * 100 的矩阵进行矩阵/数据操作是否更有效?再次感谢。

标签: r matrix dataframe memory-efficient


【解决方案1】:

两个不同的matrixes的内存使用应该是一样的:

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

效率上的任何差异都会因使用 R 的低效率而相形见绌,因此即使它们是可测量的,也几乎不需要考虑。

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

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

这个时间效率将取决于你到底想做什么。

【讨论】:

  • 感谢 Michael,我对 matrix 和 data.frame 进行了完全相同的测试并得出了相同的结论。我想知道这两种不同格式在处理矩阵的底层算法(例如 LAPACK)以及各种模型中使用的算法实现时的效率。
  • 哪种算法?提供一些您想比较效率的示例代码。
  • 我不是在比较具体的例子,而是笼统地问。 R 中的大多数算法/操作都支持哪种格式。如果您要向某人提供建议,您会推荐哪一种,为什么?
  • “一般”没有答案。对于 R 中的大多数算法,这两种格式都不受欢迎。
【解决方案2】:

对于矩阵,绝对没有区别。该矩阵的 data.frame 也是如此。重构矩阵的形状只是分配维度属性......在大多数情况下。

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

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

【讨论】:

    猜你喜欢
    • 2022-10-23
    • 2017-07-19
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 2021-05-12
    • 2012-02-18
    • 1970-01-01
    • 2023-02-25
    相关资源
    最近更新 更多