Performance 数据整形的R性能
我试图在R中重塑数据帧,但使用推荐的方法似乎有问题。数据帧具有以下结构:Performance 数据整形的R性能,performance,r,Performance,R,我试图在R中重塑数据帧,但使用推荐的方法似乎有问题。数据帧具有以下结构: ID DATE1 DATE2 VALTYPE VALUE 'abcd1233' 2009-11-12 2009-12-23 'TYPE1' 123.45 ... VALTYPE是一个字符串,是一个只有2个值的因子(例如TYPE1和TYPE2)。我需要根据公共I
ID DATE1 DATE2 VALTYPE VALUE
'abcd1233' 2009-11-12 2009-12-23 'TYPE1' 123.45
...
VALTYPE
是一个字符串,是一个只有2个值的因子(例如TYPE1
和TYPE2
)。我需要根据公共ID和日期将其转换为以下数据帧(“宽”转置):
ID DATE1 DATE2 VALUE.TYPE1 VALUE.TYPE2
'abcd1233' 2009-11-12 2009-12-23 123.45 NA
...
数据框有超过4500000个观察值(尽管约70%的值s为NA
)。这台机器是一台基于Intel的Linux工作站,内存为4Gb。将数据(从压缩的Rdata文件)加载到一个新的R进程中,使其增长到大约250Mb,这显然为重塑留下了大量空间
以下是我迄今为止的经验:
- 使用香草
重塑()
方法:
tbl2一个有用的技巧是将id变量组合成一个字符向量,然后再进行重塑
tbl$NEWID <- with(tbl, paste(ID, DATE1, DATE2, sep=";"))
tbl2 <- recast(tbl2, NEWID ~ VALTYPE, measure.var="VALUE")
tbl$NEWID以一种非R的方式来做这件事怎么样?我假设ID,DATE1,DATE2的每个值都有一行TYPE1和一行TYPE2?然后根据这些变量对数据帧进行排序,并编写一个大for循环。您可以重复执行rbind()操作来构建表,或者您可以尝试预先分配表(可能),只分配VALUE.TYPE1和VALUE.TYPE2插槽和[可能您可以使用cat()函数?否,使用recast()
显示与cast()相同的问题
上面的方法-进程占用了超过5GB的虚拟内存,因此我在大约1小时后将其终止。如果没有rbind
和循环:tbl,我们无法真正假设每个ID/日期正好有2个条目。这将立即破坏上面的Marek代码。此外,它甚至比我的工作by()/merge()更脆弱
问题主体中的代码。总的来说,我对循环方法没有任何问题,只是我不明白为什么专门用于此目的的函数(即重塑()
在这样一个小问题上失败)