2015-08-26 25 views
0

我是R的初學者,並試圖通過實踐來學習它(這意味着我沒有完全意識到這裏的術語)。我的問題如下:如何計算平均值和標準差。 dev是否符合條件的所有行?

我已經用一些基準進行了一系列的實驗並收集了一些指標。我已經有我的數據結構如下:

"Benchmark", "Metric", "Value" 

其中BenchmarkMetric從一組離散和Value爲整數或浮點數。每個(Benchmark,Metric)行在該集中出現多次(20)次,反映了20個不同的測量結果。

我想要做的就是改變這個數據設置成以下

"Benchmark", "Metric", "Avg. Value", "Std. Dev" 

這意味着我要遍歷所有可能的(BenchmarkMetric)對(不含列舉他們全部),選擇匹配的所有行這對計算Value列的平均值和stddev,並將它們添加到每個(Benchmark,Metric)對僅出現一次的新表格中。我知道包dplyr。我可以使用dplyr來完成這個嗎? (因爲我是一個初學者,任何好的[R教程將是有用的,太)

在此先感謝

PS:示例數據使用dplyr設置

"Benchmark","Metric","Value" 
BM1,Cycles,712890471 
BM1,Cycles,712890472 
BM1,Cycles,712890161 
BM1,Cycles,712897831 
BM1,Cycles,712894735 
BM2,Cycles,512390471 
BM2,Cycles,542390472 
BM2,Cycles,512891261 
BM2,Cycles,512896031 
BM2,Cycles,512864735 
BM1,ExecTime,35.4 
BM1,ExecTime,35.6 
BM1,ExecTime,32.1 
BM1,ExecTime,32.3 
BM1,ExecTime,32.3 
BM2,ExecTime,51.5 
BM2,ExecTime,51.5 
BM2,ExecTime,49.6 
BM2,ExecTime,49.4 
BM2,ExecTime,49.2 

回答

1

你可以這樣做:

library(dplyr) 
dta %>% group_by(Benchmark, Metric) %>% 
     summarise(value = mean(Value), stdev = sd(Value)) 

假設您的數據名爲dta,首先按照每個基準/度量標準對(group_by(Benchmark, Metric))進行分組, ,然後總結ech組的平均值和sd(summarise(value = mean(Value), stdev = sd(Value)))。

有關dplyr的一般介紹,請參見data wrangling cheat sheetdplyr vignette

您也可能會在data.table的興趣,它比dplyr快,但有點不太直觀:

library(data.table) 
setDT(dta)[,list(mean = mean(Value), sd = sd(Value)), by=c("Benchmark", "Metric")] 
0

基礎R解決方案

aggregate(df$Value, b = list(Benchmark = df$Benchmark, Metric = df$Metric), function(x) c(Mean = mean(x), SD = sd(x)), simplify = T) 

    Benchmark Metric  x.Mean   x.SD 
1  BM1 Cycles 7.128927e+08 3.422044e+03 
2  BM2 Cycles 5.186866e+08 1.325260e+07 
3  BM1 ExecTime 3.354000e+01 1.792484e+00 
4  BM2 ExecTime 5.024000e+01 1.158879e+00 
相關問題