【问题标题】:R - Dramatic increase in file size after reshaping wide to long data [closed]R - 将宽数据改造成长数据后文件大小显着增加[关闭]
【发布时间】:2013-03-17 20:03:46
【问题描述】:

我有一个中等大小的数据库(约 400,000 行,27 列),我需要使用相同的比较标准搜索大部分列(其中 25 列)。我认为将数据重塑/融合为“长”格式会更有效,因此我使用了 reshape2 包来生成 ~9,000,000 行/4 列数据集。除了花费很长时间(我只有 2GB 的 RAM)之外,重新调整后的文件大小非常巨大:500MB。

是否有更高效/计算量更少的方式:

  1. 重塑和存储从宽到长的数据?
  2. 完全避免重塑并仍然使用相同的搜索条件搜索多个列?

【问题讨论】:

  • 你的帖子没有数据,太笼统了。如果不运行数据(复制它),就无法找出问题(如果有的话)。第二个问题的答案是,是的,您可以搜索。除非您可以具体(将您的问题缩小到可重现的数据,并向我们展示您期望的输出......以防数据很小)。如果是大数据(如您的),那么您必须与我们联系,也许我们中的一个可以调查一下。
  • @Arun 任何基本的从宽到长的转换都可以很容易地说明我的观点。例如,下面@Matthew 的示例使用Indometh 数据集。我有兴趣搜索所有conc 列(0.250.500.75 等)并搜索它们何时大于1.00。将其转换为长格式并根据此条件进行搜索比使用宽格式更容易。

标签: r reshape reshape2


【解决方案1】:

详细说明我的评论,除了 @Matthew 已经描述的内容之外,数据压缩可能会在您获得如此不同的文件大小的原因中发挥重要作用。

例如看这个:

set.seed(1234)
A <- matrix(runif(1000), 1000, 1000, byrow = TRUE)
A <- A + runif(5)
B <- t(A)
save(A, file="A.RData")
save(B, file="B.RData")

AB 这两个数据结构包含相同的数据但转置了,但文件大小却大不相同:

file.info("B.RData")$size / file.info("A.RData")$size
# [1] 97.38222

为什么?似乎 R 的压缩算法(大部分)是按列探索数据。

如果我查看@Matthew 的示例,每个单独的列 conc.* 在我看来非常随机,即难以压缩,尽管原始列 conc 对于压缩算法而言可能看起来不那么随机。

【讨论】:

  • 这当然是他的数据增长的关键,这不是用条目数量来解释的。请注意,在我的示例中,磁盘文件的大小差别很小(690 字节与 668 字节)。
【解决方案2】:

这可能发生。

来自?reshape

summary(Indometh)
wide <- reshape(Indometh, v.names = "conc", idvar = "Subject",
            timevar = "time", direction = "wide")


> dim(Indometh)
[1] 66  3
> dim(wide)
[1]  6 12
> 66*3    # long
[1] 198
> 6*12    # wide
[1] 72

发生的情况是,您有重复的长格式值(此处为 Subjecttime):

> head(Indometh)
  Subject time conc
1       1 0.25 1.50
2       1 0.50 0.94
3       1 0.75 0.78
4       1 1.00 0.48
5       1 1.25 0.37
6       1 2.00 0.19

> wide
   Subject conc.0.25 conc.0.5 conc.0.75 conc.1 conc.1.25 conc.2 conc.3 conc.4 conc.5 conc.6 conc.8
1        1      1.50     0.94      0.78   0.48      0.37   0.19   0.12   0.11   0.08   0.07   0.05
12       2      2.03     1.63      0.71   0.70      0.64   0.36   0.32   0.20   0.25   0.12   0.08
23       3      2.72     1.49      1.16   0.80      0.80   0.39   0.22   0.12   0.11   0.08   0.08
34       4      1.85     1.39      1.02   0.89      0.59   0.40   0.16   0.11   0.10   0.07   0.07
45       5      2.05     1.04      0.81   0.39      0.30   0.23   0.13   0.11   0.08   0.10   0.06
56       6      2.31     1.44      1.03   0.84      0.64   0.42   0.24   0.17   0.13   0.10   0.09

【讨论】:

  • 我意识到了这一点,但是在将两种格式的尺寸相乘后,长版的尺寸仅大了约 3.7 倍(尺寸),而不是像它们的相对文件大小一样大约 8 倍。
  • @jsemer 在这个问题中提供线索会很好。仅列出了一种文件大小。
  • @MatthewLundberg 原始数据集(宽)文件大小为 49MB,重塑(长)版本为 414MB。我还应该注意,它是一个数据框,而不是一个矩阵。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 2016-03-20
  • 2022-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
相关资源
最近更新 更多