2016-12-25 22 views
1

下面是一個具有不同樣本,處理和代表的數據框架示例,特別是記錄生物量積累隨時間變化的控制和處理之間的數據框架。我可以計算每個樣品,處理和代表的平均生物量,通過對它們進行分組,或者通過處理組創建每個樣品的(長)列表對象,然後通過調用lapply來獲取平均生物量。但是,有沒有更簡單或更好的方法來做到這一點,而不必「離開數據框」,因此需要編寫更少的代碼?R數據框中不同處理和重複計數的平均值

set.seed(34) 
df <- data.frame(
    SAMPLE = rep(c("S0","S1","S2"), times = c(4,15,15)), 
    TREATMENT = c("Ctl","T1","T2","T3","Ctl","Ctl","Ctl", 
        "T1","T1","T1","T1","T2","T2","T2","T2", 
        "T3","T3","T3","T3","Ctl","Ctl","Ctl","T1", 
        "T1","T1","T1","T2","T2","T2","T2","T3", 
        "T3","T3","T3"), 
    REPS = c(1,1,1,1, 1,2,3,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3, 
      1,2,3,4,1,2,3,4,1,2,3,4), 
    BIOMASS = round(rnorm(34, mean = 22, sd = 5), digits = 2) 
) 

head(df) 

感謝, 富蘭克林

+0

必須有。例如,你可以嘗試'從基礎R'聚集',從'dplyr'''group_by'或使用'data.table'語法。 – Psidom

回答

2

我們可以使用aggregatebase R

aggregate(BIOMASS~SAMPLE + TREATMENT, df, mean) 

或者,如果是 'REPS' 和 '待遇' 作爲團體

aggregate(BIOMASS~REPS + TREATMENT, df, mean) 

或用data.table

library(data.table) 
setDT(df)[, .(MEAN = mean(BIOMASS)) , .(SAMPLE, TREATMENT)] 
0

謝謝Psidom和akrun。我更好地瞭解現在總...要做到這一點使用tidyverse庫這將是: ž< - dplyr :: GROUP_BY(DF,來樣,待遇) 總結(Z,平均(生物質))

相關問題