2016-12-25 4 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

が存在しなければならない(Z)(バイオマスを意味します) 。例えば、基底Rから 'tapply、aggregate'、' dplyr'から 'group_by'を試みるか、' data.table'構文を使うことができます。 – Psidom

答えて

2

我々はbase R

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

た場合、または 'REPS' とグループ

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

それともdata.tableと同じように '治療' であるからaggregateを使用することができます

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

ありがとうPsidomとakrun。私はより良いtidyverseライブラリを使用してこれを行うには...今の集計を理解し、それは次のようになります。 は、z < - dplyr :: GROUP_BY(DF、SAMPLE、TREATMENT) まとめたもの

関連する問題