问:spaa程序包的data2mat函数可将样方调查数据转换为矩阵,用于计算生物多样性指数 (http://blog.sciencenet.cn/blog-255662-310032.html),但是data2mat只能处理个体数为整数的情况。如果要处理的数据是小数, 该怎么办?
答:请参照以下的例子,用reshape2的acast函数转换。下面的R代码先将spaa程序包内置的datasample数据集转换为调查用的长格式,再将长格式转换为矩阵格式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| library(reshape2)library(spaa) data(datasample)# melt需要将行名作为data.frame中的一列datasample2 <- cbind(plot = row.names(datasample), datasample)# 将修改后的matrix转换为数据记录的常用格式aaa <- melt(data = datasample2, id.vars = "plot", measure.vars = 2:ncol(datasample2), variable.name = "species", value.name = "abundance", factorsAsStrings = TRUE)# 因有些样方中物种没有出现, 所以是0.00aaa1 <- aaa[aaa$abundance > 0, ] head(aaa1) ## plot species abundance ## 1 1 Castanopsis.eyrei 25.58 ## 2 2 Castanopsis.eyrei 28.41 ## 3 3 Castanopsis.eyrei 39.43 ## 4 4 Castanopsis.eyrei 11.53 ## 5 5 Castanopsis.eyrei 35.01 ## 6 6 Castanopsis.eyrei 51.34 # 将长数据转换为矩阵格式,行(row)这里是plot,置于 ~ 之前, # 列(column)这里是species,置于 ~ 之后。 # value.var当然就是 abundance。# 缺失值用0补齐。bbb <- acast(aaa1, formula = plot ~ species, value.var = "abundance", fill = 0)
|