对于输入数据框
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创建数百列的摘要统计信息,我正在寻找最优化的方法来执行此操作。任何帮助深表感谢。
答案 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]