R中每个物种的平均个体数/公顷数

时间:2017-08-10 03:29:26

标签: r aggregate

我有一个类似的数据集:

dat<-data.frame(Plot_ID=c("P_1","P_1","P_2","P_3","P_3"),
                Name=c("Spec1","Spec2","Spec3","Spec1","Spec4"),
                Number=c(2,3,1,5,2))

Plot_ID是物种被激活的图,名称是物种的名称,数字是该图中找到的数量。我想找出每个物种的总体数量。

我的问题是,当然不是每个物种都在每个地块中都有代表。在这种情况下,Spec2的平均个体数量为每个样本3/3。如果我像这样使用聚合函数:

agg.1<-aggregate(dat$Number, list(dat$Name),mean)

Spec2的个人数量是3,这不是我想要的。而且我并不是真的想要将每个物种添加到每个具有0值的图中,并且它不会出现。

EDID澄清我想要的结果

我想要的结果是这样的:

Name N/plot
Spec1 2.3 #Amount of individuals=7/Amount of plots=3
Spec2 1   #3/3
Spec3 0.3 #1/3
Spec4 0.6 #2/3

1 个答案:

答案 0 :(得分:2)

您可以使用dplyr ...

library(dplyr)

# output to dataframe newdf
newdf <- dat %>%
  group_by() %>% 
  mutate(n = n()) %>% 
  ungroup() %>%
  group_by(Name, n) %>%
  summarise(total = sum(Number)) %>% 
  mutate(agg.1 = total / n)

结果:

# A tibble: 4 x 4
# Groups:   Name [4]
    Name     n total agg.1
  <fctr> <int> <dbl> <dbl>
1  Spec1     5     7   1.4
2  Spec2     5     3   0.6
3  Spec3     5     1   0.2
4  Spec4     5     2   0.4

如果你想在矢量中得到结果,你可以使用pull函数(dplyr&gt; = 0.7):

agg1. <- dat %>%
  group_by() %>% 
  mutate(n = n()) %>% 
  ungroup() %>%
  group_by(Name, n) %>%
  summarise(total = sum(Number)) %>% 
  mutate(agg.1 = total / n) %>%
  pull(agg.1)