最後,我遇到了一個問題,那個數據處理非常緩慢,並附加了多個data.frames
的行。我使用lapply
和dplyr
組合進行數據處理。 OTH,由於每個數據幀中有20000行乘以目錄中的100個文件,進程變得非常慢。如何使用更快的方式處理和組合列表中的數據幀
目前這對我來說是一個巨大的瓶頸,因爲即使在lapply
過程完成後我沒有足夠的內存來處理bind_rows
過程。
這裏是我的數據處理方法,
先的文件列表
files <- list.files("file_directory",pattern = "w.*.csv",recursive=T,full.names = TRUE)
然後處理此文件列表
library(tidyr)
library(dplyr)
data<- lapply(files,function(x){
tmp <- read.table(file=x, sep=',', header = T,fill=F,skip=0, stringsAsFactors = F,row.names=NULL)%>%
select(A,B, C)%>%
unite(BC,BC,sep='_')%>%
mutate(D=C*A)%>%
group_by(BC)%>%
mutate(KK=median(C,na.rm=TRUE))%>%
select(BC,KK,D)
})
data <- bind_rows(data)
我得到它說的錯誤,
「Error: cannot allocate vector of size ... Mb」 ... depends on how much left in my ram. I have 8 Gb ram but seems still struggling;(
我也試過do.call,但沒有任何改變!誰是我對這個問題的友好職能或方法? 我使用R版本3.4.2和dplyr 0.7.4。
嘗試使用data.table函數(fread,更新引用等)。我還建議閱讀這些文件,不要進一步操作,然後用id綁定,然後運行分析一次,按「BC」和新文件ID分組。 –
@ r2evans感謝您的評論。你是什麼意思'從不使用它'我認爲'%>%'操作符在讀取'select'函數後傳遞列表中的每個文件? – Alexander
你有錯誤嗎?警告?你有什麼跡象表明事情不對?您需要提供更多信息。 (你也應該包括所有正在使用的軟件包,可能至少包括'dplyr'和'tidyr'。) – r2evans