计算R中各站点的多样性指数

时间:2017-02-14 11:19:47

标签: r for-loop vegan

我有一个数据帧(df)如下:

Year PlotNo HabitatType Sp1 Sp2 Sp3 Sp4
2000   1       GH        0   1   2   3
1988   3       KL        2   3   4   5

其中,Sp代表Species,其列代表丰度值。

我试图找到数据帧中每行的Simpson多样性。我尝试了以下循环:

require(vegan)
y <- for(i in 1:nrow(df)) {
row <- df[i,4:50] #Assuming 50 columns
diversity(row, "simp")
}

但是,我一直遇到如下错误:

  

sum(x)中的错误:参数

的'type'(字符)无效

有关如何更正此错误的任何想法?或任何其他方式来解决这个问题?

3 个答案:

答案 0 :(得分:2)

diversity确实需要数字数据,这可能是你的问题。你从sum(df[,4:50])得到了什么?

另一个问题是你不需要for()循环:当给定数据框或矩阵时,diversity将计算每行(或列,如果你设置参数{{1)的索引}})。如果您的数据是数字的,那么MARGIN = 2应该这样做。

答案 1 :(得分:0)

diversity函数只能处理数值数据。可能df[i,4:50]包含非数字元素。我的猜测是,有些列是characterfactor。但是,如果没有可重复的例子,我无法确认是否属实。

答案 2 :(得分:0)

我们可以使用:

library(data.table)
mydf <- setDF(mydf)
res <- mydf[, div := diversity(mydf[, 4:7], 'simp')]

这会为每一行添加一个列div,其结果为diversity