我正在處理一個擁有超過2百萬條記錄的數據集。我想在整個數據集上運行一個函數deyo(),但是這個過程需要超過12個小時,但還沒有完成。我想我可能會達到公羊的極限。我怎樣才能打破數據集並且每次處理更小的數據塊並把它們放在同一個文件中?將數據幀拆分爲更小的子數據幀並在R中逐個處理命令
Deyo是一個共病包函數,它將數據框作爲一個參數。 deyo(DF)。輸出是一個向量和兩個數據幀,我只需要使用向量。 所以對於整個數據集我會做分數< -deyo(df)$分數。
我正在處理一個擁有超過2百萬條記錄的數據集。我想在整個數據集上運行一個函數deyo(),但是這個過程需要超過12個小時,但還沒有完成。我想我可能會達到公羊的極限。我怎樣才能打破數據集並且每次處理更小的數據塊並把它們放在同一個文件中?將數據幀拆分爲更小的子數據幀並在R中逐個處理命令
Deyo是一個共病包函數,它將數據框作爲一個參數。 deyo(DF)。輸出是一個向量和兩個數據幀,我只需要使用向量。 所以對於整個數據集我會做分數< -deyo(df)$分數。
我在評分大型數據集時經常遇到這個問題。我用這個函數將數據幀劃分成更小的數據幀的列表:
createFrameList <- function(myData, frames){
# Creates a list of equally sized data frames of equal size
rownames(myData) <- seq(1:dim(myData)[1])
return(split(myData, (as.numeric(rownames(myData)) - 1) %/% ceiling(nrow(myData)/frames)))
}
然後我可以運行從parallel
包lapply
或mclapply
(如果我在UNIX/Linux中),以每個數據幀運行我的功能。當應用於數據框時,您會得到任何函數返回的列表。如果您的函數返回另一個幀,則可以使用plyr
包中的rbind.fill
將列表組裝回單幀數據幀。
它將需要關於數據的外觀和函數返回的更多細節。但通常,子集數據集按照一定的標準來看,這裏看起來不是。的行就足夠了,讓我們說df [1:10000,]等,並製作數據集列表,並將您的功能應用到該列表。 – Ananta
你如何在整個數據集上運行該功能?在循環中逐行排列?或者該函數是否將數據幀作爲參數? – BrodieG
聽起來像是某種並行處理的良好用例......但我想這取決於「deyo」的作用。 – Thomas