我有几个不同物种的观察数据集。有一份调查地点清单以及每个人观察到的物种:
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
答案 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
值乘以总计数。