【问题标题】:Huge dataframe to spread庞大的数据框进行传播
【发布时间】:2017-03-31 06:27:31
【问题描述】:

我有一个巨大的 df,尺寸为 (58556185 X 2)

user page  like
  1    A    1
  1    B    1
  1    C    1
  2    A    1
  2    C    1
  3    B    1
  .    .    .

且唯一用户和唯一页面分别为 100,000 和 50,000 我想把它传播到

user/page
   A   B   C ...
1  1   1   0 ...
2  1   0   1 ...
3  0   1   0 ...
.
.

我已使用此代码,它适用于小型数据集

data <- data%>%
  group_by(user)%>%
  spread(page, like, fill = 0, drop = TRUE)

但是当应用于巨大的df时,它会出现Error: cannot allocate vector of size 21626.2 Gb

有什么建议吗?谢谢

【问题讨论】:

  • 有很多关于如何处理这个问题的帖子。 Did you google ?.
  • 您计算出您的扩展矩阵将有多少行(length(unique(df$user))) 和多少列(length(unique(df$page)))?我不确定你是否真的想要那个。
  • 这不是一个好主意。生成的对象将是巨大的。考虑改用sparseMatrix。看到这个问:stackoverflow.com/questions/33457501/…
  • 最终输出将是一个 100000 * 50000 的数据帧

标签: r tidyr spread


【解决方案1】:

我已经使用稀疏矩阵来解决这个问题。

mat <- sparseMatrix(as.integer(factor(data.fbpage$uid)) ,as.integer(factor(data.fbpage$pageId)), x=data.fbpage$like)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    相关资源
    最近更新 更多