2014-05-22 66 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