我正在尝试重构一个巨大的数据框(大约12.000个案例):在旧的数据框中,一个人是一行并且有大约250列(例如Person 1,test A1,testA2, testB,...),并且我想要测试A的所有结果(1到10个A的整体和24个项目(AY)在一列中,所以一个人最终有24列和10行。也是一个固定的数据框部分在项目AY开始之前(像年龄,性别等个人信息),我想保持原样(fixdata) 函数/循环适用于30个案例(我提前试过),但对于12.000,它仍然在计算,现在已经接近24小时了。任何想法为什么?R中的无限函数/循环:数据管理
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)
}
提前致谢!
这听起来像是一个重塑问题。看看包'reshape2'中的函数'melt'。你的'data.frame'实际上并不那么庞大。如果'熔化'不能在一秒内处理不了,我会很惊讶。 (类似的问题已经在SO上定期出现了,为了一些灵感,搜索“[r] reshape” – Andrie
Andrie是正确的。一般来说,尽量不要在大数据集上使用for循环,同时你可以尝试如下: 'system.time(restructure([30datasets]))'',然后'system.time(restructure([300datasets]))'等等。这至少会让你知道现有的代码需要多长时间才能完成N个数据集 –
添加一个测试用例将有助于... –