2014-01-23 46 views
0

我有以下形式的數據集:計算基於多個變量的數據子集的平均值(每一個組合)

object.type condition date  replicate value 
object1  condition1 17/2/2014  1   5000 
object1  condition1 17/2/2014  2   6000 
object1  condition1 18/2/2014  1   5500 
object1  condition1 18/2/2014  2   6300 

object1  condition2 17/2/2014  1   5000 
object1  condition2 17/2/2014  2   6000 
object1  condition2 18/2/2014  1   5500 
object1  condition2 18/2/2014  2   6300 

object2  condition1 17/2/2014  1   5000 
object2  condition1 17/2/2014  2   6000 
object2  condition1 18/2/2014  1   5500 
object2  condition1 18/2/2014  2   6300 
etc. 

我想要做的是計算的子集的平均一定的條件下某個對象在某個日期。因此,例如,對於object1,在condition1中的17日,值將是mean(c(5000, 5500))。因此,在最後,我結束了這樣的data.frame:

object.type condition date   value 
object1  condition1 17/2/2014  5250 
object1  condition1 18/2/2014  6150 
object1  condition2 17/2/2014  5250 
object1  condition2 18/2/2014  6150 
object2  condition1 17/2/2014  5250 
etc. 

我能穿過各級對象類型,通過條件各級循環,循環的各個層面做到這一點使用嵌套循環(循環的日期),但我是R新手,我學到的是矢量化是解決這些問題的最佳方法。我似乎無法弄清楚我將如何去做。有什麼功能可以在這裏幫助嗎?還是一種整潔的方法,而不是使用三個嵌套for循環,而這些循環需要迭代(並且低效地)擴展數據框?

+1

看看?聚合 – Aashu

+1

請幫我理解:看一個t頂部的樣本數據集,對於object1,condition1,date = 17/2/2014,平均值5000和6000 = 5250是多少? – jlhoward

+0

@jlhoward啊,我知道我會在那裏滑倒,但我沒想到有人真的看着哈哈。發現得好。 – DashAnimal

回答

0
library(plyr) 
ddply(data,~ object.type + condition ,summarise,average=mean(value)) 

+0

謝謝!我實際上並沒有使用plyr庫,但它使我找到了[本文](http://www.cookbook-r.com/Manipulating_data/Summarizing_data/)的正確路徑,並幫助我理解了所有的替代方案和每個的優點/缺點。 – DashAnimal

1

使用aggregate(...),並假設您的數據試試上面從plyr包df

result <- aggregate(value ~ object.type + condition + date, df, mean) 
result 
# object.type condition  date value 
# 1  object1 condition1 17/2/2014 5500 
# 2  object2 condition1 17/2/2014 5500 
# 3  object1 condition2 17/2/2014 5500 
# 4  object1 condition1 18/2/2014 5900 
# 5  object2 condition1 18/2/2014 5900 
# 6  object1 condition2 18/2/2014 5900 

如果按照原來的順序需要result

result <- with(result,result[order(object.type, condition, date),]) 
result 
# object.type condition  date value 
# 1  object1 condition1 17/2/2014 5500 
# 4  object1 condition1 18/2/2014 5900 
# 3  object1 condition2 17/2/2014 5500 
# 6  object1 condition2 18/2/2014 5900 
# 2  object2 condition1 17/2/2014 5500 
# 5  object2 condition1 18/2/2014 5900 
相關問題