2012-04-06 27 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