R编程:计算生物指数?

R编程:计算生物指数?,r,R,我有一个物种丰度数据集(作为.csv数据格式),我想编写一个自动r脚本来计算每个采样点的生物指数(BI)。BI基于有无数据。这是我的数据(P表示物种的存在):添加了代码格式 df = data.frame(Species = c("Sp1", "Sp2","Sp3", "Sp4", "Sp5", "SP6", "Sp7", "Sp8", "Sp9"), Site1 = c("P", NA, "P", "P", NA, "P", NA, "P", "P"), Site2 = c(NA, "P",

我有一个物种丰度数据集(作为.csv数据格式),我想编写一个自动r脚本来计算每个采样点的生物指数(BI)。BI基于有无数据。这是我的数据(P表示物种的存在):添加了代码格式

df = data.frame(Species = c("Sp1", "Sp2","Sp3", "Sp4", "Sp5", "SP6", "Sp7", "Sp8", "Sp9"), Site1 = c("P", NA, "P", "P", NA, "P", NA, "P", "P"), Site2 = c(NA, "P", "P", "P", "P", NA, "P", "P", NA), Site3 = c("P", "P", NA, "P", NA, NA, NA, NA, "P"), Site4 = c(NA, "P", NA, "P", "P", "P", NA, "P", NA), Site5 = c("P", "P", "P", NA, "P", NA, NA, NA, NA))
每个地点的BI可计算为=(特定地点存在的每个物种的耐受值之和/物种总数)*10

物种耐受值:

Sp1 =1.2, Sp2=1.1, Sp3=2.3, Sp4=4, Sp5 =2.5, Sp6=7, Sp7=2.7, Sp8=3.4,Sp9 =4.5, Sp10=5.5
输出表应如下所示:

SiteName-BI
地点1 37.3
网站2 26.7
地点3 27
地点4 36

Site5 17.8
我们可以首先创建一个包含物种及其耐受值的参考数据框

ref_df <- data.frame(Species = paste0('Sp', 1:10), 
                     tolerance = c(1.2, 1.1, 2.3, 4, 2.5,7, 2.7, 3.4, 4.5, 5.5))

我们可以首先创建一个参考数据框,其中包含物种及其容忍度值

ref_df <- data.frame(Species = paste0('Sp', 1:10), 
                     tolerance = c(1.2, 1.1, 2.3, 4, 2.5,7, 2.7, 3.4, 4.5, 5.5))

重新组织数据集后,您可以使用
crossprod
获得每个站点的加权和,加权和可以除以使用
colSums
的案例数,如:

x <- df[-1] == "P"
x[is.na(x)] <- FALSE
y <- ref_df$tolerance[match(df$Species, ref_df$Species)]

crossprod(x, y) / colSums(x) * 10
#          [,1]
#Site1 37.33333
#Site2 26.66667
#Site3 27.00000
#Site4 36.00000
#Site5 17.75000

x重新组织数据集后,您可以使用
crossprod
获得每个站点的加权和,加权和可以除以使用
colSums
的案例数,如:

x <- df[-1] == "P"
x[is.na(x)] <- FALSE
y <- ref_df$tolerance[match(df$Species, ref_df$Species)]

crossprod(x, y) / colSums(x) * 10
#          [,1]
#Site1 37.33333
#Site2 26.66667
#Site3 27.00000
#Site4 36.00000
#Site5 17.75000

x您能使用
dput
添加数据吗,即
dput(df)
并显示上述示例的预期输出吗?嗨,Ronak,希望这是您的意思,所以您案例中的物种总数是9,对吗?或者你想计算每个物种的站点数量?是的,物种总数是9个,但不是所有站点都有9个物种。你可以使用
dput
dput(df)
添加数据,并显示上面示例的预期输出吗?嗨,Ronak,希望这是你的意思,因为你的案例中的物种总数是9个,对吗?或者你想计算每个物种的数量吗?是的,物种总数是9个,但不是所有的站点都有9个物种