【发布时间】:2010-12-24 01:44:24
【问题描述】:
我正在尝试在 R 中重塑数据框,但使用推荐的方法似乎存在问题。数据框结构如下:
ID DATE1 DATE2 VALTYPE VALUE
'abcd1233' 2009-11-12 2009-12-23 'TYPE1' 123.45
...
VALTYPE 是一个字符串,并且是一个只有 2 个值的因子(例如 TYPE1 和 TYPE2)。我需要根据通用 ID 和 DATE 将其转换为以下数据框(“宽”转置):
ID DATE1 DATE2 VALUE.TYPE1 VALUE.TYPE2
'abcd1233' 2009-11-12 2009-12-23 123.45 NA
...
数据框有超过 4,500,000 个观察值(尽管 VALUEs 中大约 70% 是 NA)。该机器是基于 Intel 的 Linux 工作站,具有 4Gb 的 RAM。将数据(从压缩的 Rdata 文件)加载到新的 R 进程中,使其增长到大约 250Mb,这显然为整形留下了很大的空间。
这些是我迄今为止的经历:
-
使用香草
reshape()方法:tbl2
结果:Error: cannot allocate vector of size 4.8 Gb
-
使用
reshape包的cast()方法:tbl2
结果:R 进程消耗了所有 RAM,而且看不到尽头。最终不得不终止进程。
-
使用
by()和merge():sp
结果:工作正常,虽然这不是很优雅和万无一失(即,如果添加更多类型,它将破坏)。
为了雪上加霜,所讨论的操作可以在大约 3 行 AWK 或 Perl 中轻松实现(并且几乎不使用任何 RAM)。所以问题是:在不消耗所有可用 RAM 的情况下,使用推荐的方法在 R 中执行此操作的更好方法是什么?
【问题讨论】:
标签: performance r