2017-02-03 52 views
2

我有一個大型的數據框,其中包含不同參數的實驗。參數的每個組合有幾個執行:我如何在R中保留未經處理的聚合列R

PROFILE TIME NTHREADS PARAM1 PARAM2 PARAM3 
prof1 3.01 1  4  10  1 
prof1 2.90 1  4  10  1 
prof1 3.02 1  4  10  1 
prof1 1.52 1  4  10  2 
prof1 1.60 1  4  10  2 
... 

我使用的骨料,以獲得輪廓&來確定nthreads的每個組合的最佳時間:

data_aggregated <- aggregate(data$TIME, 
          by = list(PROFILE = data$PROFILE, 
             NTHREADS = data$NTHREADS), 
          FUN = min) 

返回一個新的數據幀是這樣的:

PROFILE NTHREADS TIME 
prof1 1  1.52 
prof1 2  0.9 
prof2 1  1.41 
prof2 2  0.88 
... 

我想要的是獲得PARAM1,PARAM2,PARAM3 的值在每種情況下聚合行(一個用最短的時間)。現在,我在第一個數據幀中查看PROFILE,TIME和NTHREADS與第二個數據幀中的行相同的行,但也許有更簡單的方法?

+1

'which.min(TIME)'也應該爲你工作 –

+1

也許你有添加了一步兩個dataframes合併。 –

回答

2

或者,dplyr

library(dplyr) 
dat <- dat %>% 
    group_by(PROFILE, NTHREADS) %>% 
    filter(TIME == min(TIME)) 
0

最後我與Ronak沙阿的評論做了。 IFF &值(因爲與MIN而不是MEAN聚集的)兩個dataframes份額的列名,最簡單的解決辦法是:

data_aggr <- merge(data_aggr, data) 
0

考慮ave,所述方法聚合在不同水平的因素。您可以將多個分組作爲單獨的參數:

data <- read.table(text="PROFILE TIME NTHREADS PARAM1 PARAM2 PARAM3 
         prof1 3.01 1  4  10  1 
         prof2 2.90 2  4  10  1 
         prof1 3.02 1  4  10  1 
         prof2 1.52 2  4  10  2 
         prof1 1.60 1  4  10  2", header=TRUE) 

data$min_TIME <- ave(data$TIME, data$PROFILE, data$NTHREADS, FUN=min) 
data 

# PROFILE TIME NTHREADS PARAM1 PARAM2 PARAM3 min_TIME 
# 1 prof1 3.01  1  4  10  1  1.60 
# 2 prof2 2.90  2  4  10  1  1.52 
# 3 prof1 3.02  1  4  10  1  1.60 
# 4 prof2 1.52  2  4  10  2  1.52 
# 5 prof1 1.60  1  4  10  2  1.60