在平均计数计算中包括零

时间:2015-11-11 21:59:22

标签: r

我有几个不同物种的观察数据集。有一份调查地点清单以及每个人观察到的物种:

Survey    Species
  1          A
  1          C
  2          B
  3          D
  4          NA

所以每条线都是一个目击,有关物种的信息。我试图计算每个物种观察到的平均数,包括未观察到的调查的零点(以及没有观察到个体的调查:物种= NA)。

我的第一个想法是使用plyr:

avg_count = ddply(df, c("Survey", "Species"), summarise, count =
                  length(Species)/length(unique(df$Survey)))

但我很确定这不包括没有看到特定物种的调查。

理想的输出将是以下几点:

Species      Average Count
   A              0.03
   B              0.5
   C              0.013
   D              0.29
   E              0.08

2 个答案:

答案 0 :(得分:0)

感谢@Frank给我这个答案的核心。这是我做的:

df = table(df)
df = prop.table(df)
df = as.data.frame(df)
df$Count = df$Freq*5005 ##this was the total number of individual observations I had

在每次调查中,我得到了每个物种的数量。然后我将它与ddply结合起来以获得手段等:

summary = ddply(df, "Species", summarise, average = mean(Count))

答案 1 :(得分:0)

我不是100%确定这是否是您正在寻找的,因为我不确定您所需的输出是否与您提供的示例数据相关联。但与您的解决方案类似,但可能更有效的是:

### it is usually helpful for people 
### to help if you have code to 
### specifically reproduce the data
data <- data.frame(c(1,1,2,3,4),c("A","C","B","D",NA))
colnames(data) <- c("Survey","Species")


### i use the suggested prop.table() and table()
df <- prop.table(table(data))
### here, however, I decide to use data.table() rather than data.frame()
### because of its super helpful properties
df <- data.table(df)

df <- df[,list("Freq"=sum(N)),by=Species]

> df
   Species Freq
1:       A  0.25
2:       B  0.25
3:       C  0.25
4:       D  0.25

然后,您可以将df$Freq值乘以总计数。