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)
提前致谢!
知道为什么:你rbind要out在每个迭代.随着数量的增加,每次迭代都需要更长的时间 - 因此,随着数据集的增加,您不得不期望运行时间的线性增长.
所以,正如Andrie所说,你可以看一下melt.
或者你可以用核心R:来做stack.然后你需要自己修复固定部分到结果,(你需要重复固定的列each = n.var.cols
第三种替代方案是array2df封装arrayhelpers.
| 归档时间: |
|
| 查看次数: |
348 次 |
| 最近记录: |