如何将存储在地理参考单元格中的原始数据转换为矩阵以创建新的栅格图层?

时间:2015-08-24 15:53:45

标签: r csv matrix split raster

我有一个分配给空间网格单元的动物物种数据集("每个单元格中的物种名称.sv"),因此每行显示每个单元格的质心坐标(X和Y坐标)和& #34;名称"共同发生的动物:

             X          Y                            names
1 -11674838.48 7245745.48 sp1~sp2~sp3
2 -10324030.56 7245745.48 sp1~sp3~sp6~sp7~sp11
3 -16402680.16 4930074.76 sp3~sp4~sp22~sp23~sp24~sp25~sp29
4 -13958700.56 6457645.24 sp2~sp3~sp6~sp8~sp9~sp10
5 -10484850.56 7839744.11 sp1~sp2~sp11~sp22

另一个数据集(" DIET.csv")表明哪些物种捕食其他物种(捕食者和猎物):

     Predator       Prey       PreyMass       PredatorMass
1         sp1       sp10           45.5              125.5
2         sp1       sp11           22.4              125.5
3         sp2       sp10           45.5               84.0
4         sp2       sp12           22.1               84.0
5         sp3       sp22          178.0               60.0

我想:1)识别每个捕食者与其至少一个猎物共同发生的所有细胞; 2)识别每个捕食者的细胞,其中至少有一种捕食者物种捕食至少一个类似的猎物。

我开始使用代码将原始数据转换为矩阵,列出每个单元格中出现的物种(单元格行和每个动物的列数):

spnames = read.csv("./Names of species in each cell.csv", as.is=TRUE) #Data

diet = read.csv("./DIET.csv", as.is=TRUE) #Data

M = matrix(nrow = nrow(spnames),ncol = nrow(diet))
for(i in 1:nrow(spnames))
{
    temp = strsplit(spnames$names[i],"~")

    #if there is at least one species there (length == 1 means there is 0 species)
    if(length(temp[[1]]) > 1)
    {
        #go through each species, and update the P/A matrix
        for(j in 2:length(temp[[1]]))
        {
            index = which(diet$Binom == temp[[1]][j])

            #Check to make sure exactly one species was matched
            if(length(index) == 1)
            {
                M[i,index] = 1
            } 
            else(print(paste("Error",i,j)))
        }
    }
}

在矩阵之外,最终我想为每个捕食者物种创建栅格图层,细胞包含上述两种信息来源(每种捕食者物种的捕食物种+捕食者物种,每种捕食者物种具有相似的猎物)

任何建议都将受到高度赞赏。

0 个答案:

没有答案