将数据帧拆分为较小的子数据帧,并在R中逐个处理命令

时间:2014-02-20 21:15:39

标签: r loops split

我正在研究一个拥有超过两百万条记录的数据集。我想在整个数据集上运行一个函数deyo(),但是这个过程耗时超过12小时仍未完成。我想我可能会达到ram限制。我如何打破数据集并每次处理较小的块并将其输出到同一个文件中?

Deyo是comorbidities包中的一个函数,它将数据框作为争论。 deyo(DF)。输出是一个向量和两个数据帧,我只需要使用向量。 所以对于整个数据集,我将得分< -deyo(df)$得分。

2 个答案:

答案 0 :(得分:1)

df2<-split(df, rep(1:200, each=1000))
sapply(df2,deyo)

答案 1 :(得分:1)

在评分大型数据集时,我经常遇到这个问题。我使用此函数将数据帧划分为较小的数据帧列表:

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)))
  }

然后我可以从lapply包中运行mclapplyparallel(如果我在UNIX / Linux机器上),以便在每个数据帧中运行我的函数。当应用于数据框时,您将获得函数返回的列表。如果您的函数返回另一个框架,则可以使用rbind.fill包中的plyr将您的列表组合回单个数据框。