融合大型数据帧-reshape2的融合是否有实际的大小限制?

时间:2019-07-23 15:45:44

标签: r large-data melt

问题

我正在尝试将装入约11k变量和2k行的数据集的调查数据集重整为long(er)格式,以便对循环问题产生的变量进行一些分析。我还没有办法解决内存分配错误。

我是否达到了在数据帧上使用融合的实际大小限制(CSV格式约有28MB)?是否有使用熔体的其他方法,还是为此目的使用了不同的功能/库?

到目前为止我尝试过的一切

我尝试使用reshape2的melt函数,该函数应该很简单,但会立即产生内存错误(“无法分配大小向量...”)。

然后,我尝试将循环变量分解为大块,以使许多较小的数据帧融化,然后重新构成。这给了我类似的错误(无法分配的尺寸较小)。

作为参考,我的数据具有一个标识符字段(“ SbjNum”),仅出现一次的变量(大约1900个)和每个出现100次的99个变量(前缀为“ I_X_I_Y”,其中X和Y标识循环)-并应熔化成与唯一的X和Y相对应的行。

只是天真地使用熔化看起来像这样:

molten <- melt(data, id.vars = c("SbjNum"))

到目前为止我尝试过的分块看起来像这样:

#all variable names produced by the loops
loops <- names(data)[grep("I_\\d{1,2}_I_\\d{1,2}",names(data))] 

#setting number of desired chunks
nloopvars <- length(loops)
nchunks <- 100

#make nchunks indexers to subset my data
chunks <- lapply(#indices of loops split into nchunks groups
                 split(1:nloopvars, sort(1:nloopvars%%nchunks)), 
                 function(v){loops[v]}
                 )

#melt little subsets of the data       
molten <- lapply(chunks,
                    function(x){
                      # take only identifier and a subset of loop vars
                      df <- data[c("SbjNum", x)] 
                      # melt the loop vars
                      return(melt(df, id.vars = "SbjNum"))
                      }
                    )

编辑:终止并重新启动R并以几种不同方式清除我的工作区后,方法2现在可以使用。

1 个答案:

答案 0 :(得分:0)

终止并重新启动R,并多次清理工作空间后,我自己的“分块”方法现在可以工作(请参阅问题)-我建议尝试此方法,以防其他人遇到类似问题。

[仍然存在一个问题,即融化的大小才有意义,但我现在还不知道答案就可以生存。]