首页 > 解决方案 > R:对每一列求和,平均覆盖值和相对平均覆盖值

问题描述

我有一个数据框,其中包含多个地块中许多植物物种的百分比覆盖数据:

例子

        sp1 sp2 sp3 sp4
PlotA   1   12  0   0
PlotB   0   3   5   0
PlotC   3   0   0   1
PlotD   0   6   0   0
PlotE   1   1   0   0

我想为每个单独的物种/列计算一些东西:

每个物种有多少块地?(例如 sp1 = 3,sp2 = 4,sp3 = 1)

什么是平均 pct。每个地块每个物种的覆盖率?(总覆盖/总地块,例如 sp1 = 1.0,sp2 = 4.4)

什么是相对平均值。百分比。每个地块每个物种的覆盖率?(平均 pct 覆盖率/所有平均 pct 覆盖率的总和)

将物种设为行,将地块设为列,是否会更容易实现这一点?

标签: raggregate

解决方案


没有包的解决方案,使用 colSums 和 colMeans

数据:

df = data.frame(sp1 = c(1,0,3,0,1),
                sp2 = c(12,3,0,6,1),
                sp3 = c(0,5,0,0,0),
                sp4 = c(0,0,1,0,0),
                row.names = paste("Plot",c("A","B","C","D","E"),sep=""))

问题 :

# question 1
pres = colSums(apply(df,2,function(x) x>0))
# question 2
pct = colMeans(df)
# question 3
rlt = pct/sum(pct)*100

df2 = data.frame(pres,pct,rlt)
df2
#     pres pct       rlt
# sp1    3 1.0 15.151515
# sp2    4 4.4 66.666667
# sp3    1 1.0 15.151515
# sp4    1 0.2  3.030303

t()通常在生态中,我们将个体排成一行,但是如果您需要,这种转换很容易通过功能实现。


推荐阅读