【发布时间】:2013-04-27 21:58:28
【问题描述】:
我想在一个非常大的 data.frame 上使用 diff 函数:1.4 亿行和两列。
目标是为每个 user_id 计算两个连续日期活动之间的差距。 对于每个用户,第一个活动没有前一个活动,所以我需要一个 NA 值。
我使用了这个功能,它适用于小数据集,但对于大数据集,它真的很慢。我从昨天开始就在等待,它还在运行。
df2 <- as.vector(unlist(tapply(df$DATE,df$user_id, FUN=function(x){ return (c(NA,diff(x)))})))
我有很多内存 (24GO) 和一个 4 核 CPU,但只有一个在工作。
我们该如何解决这个问题?如果我将数据帧转换为矩阵会更好吗?
【问题讨论】:
-
我会考虑使用
data.table来解决涉及这种规模的数据集的问题。您将看到将 df 转换为 data.table (DT <- data.table(df)) 的速度显着提高。 -
将小数据集所花费的时间乘以小数据集与大数据集的比率。已经过去这么多时间了吗?要回答您的其他问题,通常矩阵对象的处理速度比数据框对象快。
-
@CarlWitthoft 矩阵会快得多,但 R 仍会制作数据的后台副本,对吗?这将是一个在如此大的数据集上减慢它的事情。
-
你能确认你可以在 4 秒内完成(在相同大小的简单向量上)吗?因为这不是我的情况。
-
@SimonO101 确实如此。我的计算至少提供了处理时间的下限。
标签: r dataframe multicore subset