Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 数据整形的R性能_Performance_R - Fatal编程技术网

Performance 数据整形的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

我试图在R中重塑数据帧,但使用推荐的方法似乎有问题。数据帧具有以下结构:

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()更脆弱
    问题主体中的代码。总的来说,我对循环方法没有任何问题,只是我不明白为什么专门用于此目的的函数(即
    重塑()
    在这样一个小问题上失败)