R中的无限功能/循环:数据管理

Eli*_*isa 2 for-loop r function large-data data-management

我正在尝试重构一个巨大的数据帧(大约12.000个案例):在旧的数据帧中,一个人是一行,有大约250列(例如人1,测试A1,testA2,testB,......),我想要所有的结果测试A(1 - 10 A的总体和24个项目(AY)在一列中的那个人,所以一个人最终有24列和10行.在AY项目开始之前还有一个固定的数据框部分(个人)像年龄,性别等信息,我希望保持原样(fixdata).函数/循环适用于30个案例(我提前尝试过)但是对于12.000它仍然在计算,现在将近24小时.有什么想法吗?

restructure <- function(data, firstcol, numcol, numsets){
    out <- data.frame(t(rep(0, (firstcol-1)+ numcol)) )
    names(out) <- names(daten[0:(firstcol+numcol-1)])
      for(i in 1:nrow(daten)){
         fixdata <- (daten[i, 1:(firstcol-1)])

          for (j in (seq(firstcol, ((firstcol-1)+ numcol* numsets), by = numcol))){
              flexdata <- daten[i, j:(j+numcol-1)]
              tmp <- cbind(fixdata, flexdata)
              names(tmp) <- names(daten[0:(firstcol+numcol-1)])
              out <- rbind(out,tmp)
          }  
      }
    out <- out[2:nrow(out),]
    return(out)
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!

cbe*_*ica 5

知道为什么:你rbindout在每个迭代.随着数量的增加,每次迭代都需要更长的时间 - 因此,随着数据集的增加,您不得不期望运行时间的线性增长.

所以,正如Andrie所说,你可以看一下melt.

或者你可以用核心R:来做stack.然后你需要自己修复固定部分到结果,(你需要重复固定的列each = n.var.cols

第三种替代方案是array2df封装arrayhelpers.