赖江山的博客分享 http://blog.sciencenet.cn/u/laijiangshan 生态、统计与R语言

博文

将样方多度数据转为“样方-物种”矩阵的函数

已有 9126 次阅读 2017-1-13 17:33 |系统分类:科研笔记

很多多元统计分析方法(例如聚类、排序等)最基本分析数据是“样方-物种”矩阵数据,但是我们野外调查数据输入往往是三列数据,即第一列为样方号,第二列为物种名,第三列为物种多度,对于这样的数据,如何变为样方-物种多度矩阵,我编了了一个小程序,方便大家使用。

b=read.csv("rawdata.csv",header=T)#读入数据

tram.sitedata=function(data1)

{Species=unique(data1$species) #提取所有的不重复物种名称并赋给Species向量

Site=unique(data1$site) #提取所有不重复样方编号并赋给Site向量

n=length(Species) #计算不重复物种数并赋值给n

m=length(Site)   #计算不重复的样方数并赋值给m

newdata=as.data.frame(matrix(0,m,n))#构建一个新m×n的矩阵,然后将矩阵转为数据框,才能添加行名和列名

names(newdata)=Species #将列名改为物种名称

row.names(newdata)=Site #将行名改为样方的名称

#做一个行循环,然后进行填空

for(i in 1:m)

{newdata1=data1[data1$site==Site[i],]#提取原始数据第i个样方的数据

newspecies=newdata1$species           #提取第i个样方的物种名

newn=length(newspecies)               #提取第i个样方的物种数

#做一个列循环,看多少个物种,就只插入多少数值

for (j in 1:newn)

{Ncol=which(Species==newspecies[j])#提取第i个样方的物种所在的位置

newdata[i,Ncol]=newdata1$abun[j]   #第i行物种所在的位置依次填入当前的物种多度值

}

}


return(newdata)#返回结果

}


k=tram.sitedata(b)

k

write.csv(k,file="sitedata.csv")

rawdata.csv #本案例所使用数据



https://blog.sciencenet.cn/blog-267448-1027387.html

上一篇:混合效应模型和广义线性模型计算R方的函数sem.model.fits
下一篇:从大样地里面随机抽取若干个小样方的程序
收藏 IP: 222.129.50.*| 热度|

1 杨千慧

该博文允许注册用户评论 请点击登录 评论 (8 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-18 11:02

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部