有没有办法并行化循环运行的汇总函数?

时间:2015-07-20 04:03:41

标签: r dataframe

对于输入数据框

input<-data.frame(col1=seq(1,10000),col2=seq(1,10000),col3=seq(1,10000),col4=seq(1,10000))

我必须运行存储在另一个数据框中的以下摘要

summary<-data.frame(Summary_name=c('Col1_col2','Col3_Col4','Col2_Col3'),
ColIndex=c("1,2","3,4","2,3"))

#summary
Summary_name ColIndex
 Col1_col2      1,2
 Col3_Col4      3,4
 Col2_Col3      2,3

我有以下功能来运行聚合

loopSum<-function(input,summary){
  for(i in seq(1,nrow(summary))){
  summary$aggregate[i]<-sum(input[,as.numeric(unlist(str_split(summary$ColIndex[i],',')))])}
return(summary)  
}

我的要求是仅在并行中运行loopSum中使用的总和,即我希望一次性运行所有摘要,从而减少函数创建摘要所花费的总时间。有没有办法做到这一点?

我的实际场景要求我为摘要data.frame中的每个Summary_name创建数百列的摘要统计信息,我正在寻找最优化的方法来执行此操作。任何帮助深表感谢。

1 个答案:

答案 0 :(得分:1)

是否会改善运行时间?

library(tidyr)
input1 <- colSums(input)
summary1 <- separate(summary, "ColIndex", into=c("X1", "X2"), sep=",", convert = TRUE)
summary$aggregate <- input1[summary1$X1] + input1[summary1$X2]