2014-05-22 26 views
-2

我有含5列器R并联执行

COL1 | COL2 | COL 3 | COL 4 | COL 5 

我需要聚合在COL1和COL2应用4个不同的函数来COL5列的数据帧

a1<-aggregate(COL2 ~ COL1, data = dataframe, sum) 
    a2<-aggregate(COL3 ~ COL1, data = dataframe, length) 
    a3<-aggregate(COL4 ~ COL1, data = dataframe, max) 
    a4<-aggregate(COL5 ~ COL1, data = dataframe, min) 

finalDF<- Reduce(function(x, y) merge(x, y, all=TRUE), list(a1,a2,a3,a4)) 

1)I有24个核心上机器。 如何并行执行4行代码(a1,a2,a3,a4)? 我想同时使用4个内核,然后使用减少计算finalDF

2)我可以使用不同的列不同的功能在一个聚合 (我可以在多个列中使用一个乐趣,我还可以在使用多个功能但是我无法在不同列上应用多个功能[COL2-sum,COL3-length,COL4-max,COL5-min])

+2

如果'聚合'速度太慢,你应该使用data.table或dplyr来代替。速度增益预计会比因子4好得多。 – Roland

+1

请提供一个可重现的示例,并说明数据的维度,以及您在真实数据集中唯一组的总数。如果您可以提供代码来生成代表您的真实数据集的样本数据,那更好。 – Arun

回答

3

这是一个示例,说明如何使用dplyr如@Roland所示

set.seed(2) 
df <- data.frame(COL1 = sample(LETTERS, 1e6, replace=T), 
      COL2 = rnorm(1e6), 
      COL3 = runif(1e6, 100, 1000), 
      COL4 = rnorm(1e6, 25, 100), 
      COL5 = runif(1e6, -100, 10)) 

#> head(df) 
# COL1  COL2  COL3  COL4  COL5 
#1 E 1.0579823 586.2360 -3.157057 -14.462318 
#2 S 0.1238110 872.3868 129.579090 9.525772 
#3 O 0.4902512 498.0537 93.063487 1.910506 
#4 E 1.7215843 200.7077 126.716256 -5.865204 
#5 Y 0.6515853 275.3369 12.554218 -26.301225 
#6 Y 0.7959678 134.4977 54.789415 -33.145334 

require(dplyr) 

df <- df %.% 
    group_by(COL1) %.% 
    summarize(a1 = sum(COL2), 
      a2 = length(COL3), 
      a3 = max(COL4), 
      a4 = min(COL5))  #add as many calculations as you like 

开我的机器花了0.064秒。

#> head(df) 
#Source: local data frame [6 x 5] 
# 
# COL1   a1 a2  a3  a4 
#1 A -0.9068368 38378 403.4208 -99.99943 
#2 B 6.0557452 38551 419.0970 -99.99449 
#3 C 108.5680251 38673 491.8061 -99.99382 
#4 D -34.1217133 38469 481.0626 -99.99697 
#5 E -68.2998926 38168 452.8280 -99.99602 
#6 F -185.9059338 38159 417.2271 -99.99995