【问题标题】:Efficient way to transpose large dataset in R在 R 中转置大型数据集的有效方法
【发布时间】:2016-01-05 04:09:52
【问题描述】:

假设我有一张如下表:

A  B
1  2
1  3
1  4
5  8
5  9
5  10

我想要如下输出:

  B
A 2  3  4 8 9 10
1 1  1  1 0 0 0 
5 0  0  0 1 1 1

是否有可以创建“指标矩阵”的包?真实数据集大约有 300,000,000 行和 2 列。 B列中的值实际上是变量,我想创建一个数据集来指示该变量是否“打开”。

【问题讨论】:

  • table(mydf) 应该可以帮助您。
  • 如果我做 table(mydf) 我得到一个错误: table(train) 中的错误:尝试使用 >= 2^31 个元素制作一个表格。
  • 如果都是整数,则转成矩阵。
  • 我正在使用 data.table 包,我想保留它的数据类型
  • 使用data.table 你可以做类似dcast(dt, A~B, fun.aggregate=length)的事情

标签: r


【解决方案1】:

你可以这样使用:

df <- data.frame(A = c(1, 1, 1, 5, 5, 5), B = c(2, 3, 4, 8, 9, 10))
table(df)

如果数据框中有其他列,并且只想使用 A、B 列,可以这样使用:

table(df$A, df$B)

您可以通过将上面的表格输出转换为数据框来将此表保存为自己的数据框,如下所示:

df <- as.data.frame(table(df$A, df$B))

【讨论】:

  • 我在尝试创建数据框时达到了系统的内存限制。有没有其他方法可以做到这一点,或者 R 不适合处理非常大的数据集。
  • 这似乎不是 R 问题,而是系统上可用内存的问题。很可能您没有足够的数据进行这种规模的数据汇总。
  • 我有 16 GB 的 RAM。那么有没有其他选择或者我需要购买更好的电脑?
  • 这不是一个好的答案,因为问题说明了“有效的转置方式”;这意味着应该有一种功能或方法可以在不需要大量 RAM 的情况下进行转置(因此是“高效”部分)。这个答案没有提供替代方法来实现这一点,也没有解释为什么它可能是不可能的。
猜你喜欢
  • 1970-01-01
  • 2020-12-28
  • 2021-02-18
  • 1970-01-01
  • 2014-02-09
  • 1970-01-01
  • 2022-01-14
  • 2019-05-03
  • 2010-11-09
相关资源
最近更新 更多