我正在尝试在 R 中重塑数据框,但使用推荐的方法似乎有问题。数据帧具有以下结构:
ID DATE1 DATE2 VALTYPE VALUE
'abcd1233' 2009-11-12 2009-12-23 'TYPE1' 123.45
...
VALTYPE
是一个字符串,是一个只有 2 个值的因子(比如TYPE1
and TYPE2
)。我需要根据通用 ID 和日期将其转换为以下数据框(“宽”转置):
ID DATE1 DATE2 VALUE.TYPE1 VALUE.TYPE2
'abcd1233' 2009-11-12 2009-12-23 123.45 NA
...
该数据框有超过 4,500,000 个观测值(尽管大约 70%VALUE
s are NA
)。该机器是基于 Intel 的 Linux 工作站,具有 4Gb RAM。将数据(从压缩的 Rdata 文件)加载到新的 R 进程中会使其增长到大约 250Mb,这显然为重塑留下了大量空间。
到目前为止,这些是我的经历:
-
使用香草reshape()
method:
tbl2
RESULT: Error: cannot allocate vector of size 4.8 Gb
结果:R 进程消耗了所有 RAM,而且看不到尽头。最终不得不终止该进程。
-
Using by()
and merge()
:
sp
结果:工作正常,尽管这不是很优雅和万无一失(即,如果添加更多类型,它会崩溃)。
雪上加霜的是,所讨论的操作可以通过大约 3 行 AWK 或 Perl 轻松实现(并且几乎不使用任何 RAM)。所以问题是:在 R 中使用推荐方法执行此操作而不消耗所有可用 RAM 的更好方法是什么?
一个有用的技巧是将 id 变量组合成一个字符向量,然后进行重塑。
tbl$NEWID <- with(tbl, paste(ID, DATE1, DATE2, sep=";"))
tbl2 <- recast(tbl2, NEWID ~ VALTYPE, measure.var="VALUE")
在我的 intel core2 duo 2.2ghz macbook 上解决类似大小的问题时,速度快了大约 40%。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)