2012-04-06 55 views
3

我正在查看一些生態數據(飲食)並試圖找出如何由Predator進行分組。我希望能夠提取數據,以便我可以查看每個捕食者的每個物種的每個獵物的權重,即計算每個物種的平均體重,例如捕食者117.我已經把樣本我的數據在下面。將生態數據分組爲R

Predator PreySpecies PreyWeight 
1 114  10 4.2035496 
2 114  10 1.6307026 
3 115  1 407.7279775 
4 115  1 255.5430495 
5 117  10 4.2503708 
6 117  10 3.6268814 
7 117  10 6.4342073 
8 117  10 1.8590861 
9 117  10 2.3181421 
10 117  10 0.9749844 
11 117  10 0.7424772 
12 117  15 4.2803743 
13 118  1 126.8559155 
14 118  1 276.0256158 
15 118  1 123.0529734 
16 118  1 427.1129793 
17 118  3 237.0437606 
18 120  1 345.1957190 
19 121  1 160.6688815 
+0

可能重複【計算值在使用公式表平均\ [R \]](http://stackoverflow.com/questions/6798327/calculating-the-數值的平均值使用公式-r) – bernie 2012-04-08 03:33:14

回答

7

可以按如下方式使用aggregate功能:

aggregate(formula = PreyWeight ~ Predator + PreySpecies, data = diet, FUN = mean) 

# Predator PreySpecies PreyWeight 
# 1  115   1 331.635514 
# 2  118   1 238.261871 
# 3  120   1 345.195719 
# 4  121   1 160.668881 
# 5  118   3 237.043761 
# 6  114   10 2.917126 
# 7  117   10 2.886593 
# 8  117   15 4.280374 
5

有得到自己想要的幾種不同的方式:

  1. aggregate功能。可能你在追求什麼。

    aggregate(PreyWeight ~ Predator + PreySpecies, data=dd, FUN=mean) 
    
  2. tapply:非常有用,但只由單一因素劃分變量,因此,我們需要創建一個需要共同因素與粘貼命令:

    tapply(dd$PreyWeight, paste(dd$Predator, dd$PreySpecies), mean) 
    
  3. ddply:部分plyr包。很有用。值得學習。

    require(plyr) 
    ddply(dd, .(Predator, PreySpecies), summarise, mean(PreyWeight)) 
    
  4. dcast:輸出是在更表格格式的。部分reshape2包。的

    require(reshape2) 
    dcast(dd, PreyWeight ~ PreySpecies+ Predator, mean, fill=0) 
    
+0

非常感謝! – Luke 2012-04-09 13:09:43

0

mean(data$PreyWeight[data$Predator==117]);

+0

這可能不像這裏給出的其他答案那麼實際有用......如果你想得到所有捕食物種的結果,你需要一整套這樣的陳述或for循環...更多有用(我認爲)作爲一個教學的例子。 – 2012-04-10 20:59:49

+0

你可能是對的。有時快速和骯髒是方便的。 – flies 2012-04-10 21:09:34