我正在嘗試重構一個巨大的數據框(大約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個數據集 –
添加一個測試用例將有助於... –