我有一个分配给空间网格单元的动物物种数据集("每个单元格中的物种名称.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)))
}
}
}
在矩阵之外,最终我想为每个捕食者物种创建栅格图层,细胞包含上述两种信息来源(每种捕食者物种的捕食物种+捕食者物种,每种捕食者物种具有相似的猎物)
任何建议都将受到高度赞赏。