gpt4 book ai didi

r - 计算网格中物种的出现次数

转载 作者:行者123 更新时间:2023-12-01 16:35:01 25 4
gpt4 key购买 nike

我在 R 中有大约 500,000 个关于美国各地候鸟物种出现数据的点。

我试图在这些点上覆盖一个网格,然后计算每个网格中出现的次数。统计完计数后,我想将它们引用到网格单元 ID。

在 R 中,我使用了 over() 函数来获取范围图中的点,该范围图是一个 shapefile。

#Read in occurrence data
data=read.csv("data.csv", header=TRUE)
coordinates(data)=c("LONGITUDE","LATITUDE")

#Get shapefile of the species' range map
range=readOGR(".",layer="data")

proj4string(data)=proj4string(range)

#Get points within the range map
inside.range=!is.na(over(data,as(range,"SpatialPolygons")))

上述内容完全按照我的希望工作,但没有解决我当前的问题:如何处理 SpatialPointsDataFrame 类型的点以及栅格网格。您是否建议对栅格网格进行多边形化,并使用我上面指出的相同方法?或者其他流程会更有效吗?

最佳答案

首先,您的 R 代码无法按编写的方式工作。我建议将其复制粘贴到一个干净的 session 中,如果它也出现错误,请更正语法错误或包含附加库,直到它运行为止。

也就是说,我假设您最终应该得到一个二维数字坐标的 data.frame 。因此,为了对它们进行分箱和计数,任何此类数据都可以,因此我冒昧地模拟了这样的数据集。如果这没有捕获您数据的相关方面,请纠正我。

## Skip this line if you are the OP, and substitute the real data instead.
data<-data.frame(LATITUDE=runif(100,1,100),LONGITUDE=runif(100,1,100));

## Add the latitudes and longitudes between which each observation is located
## You can substitute any number of breaks you want. Or, a vector of fixed cutpoints
## LATgrid and LONgrid are going to be factors. With ugly level names.
data$LATgrid<-cut(data$LATITUDE,breaks=10,include.lowest=T);
data$LONgrid<-cut(data$LONGITUDE,breaks=10,include.lowest=T);

## Create a single factor that gives the lat,long of each observation.
data$IDgrid<-with(data,interaction(LATgrid,LONgrid));

## Now, create another factor based on the above one, with shorter IDs and no empty levels
data$IDNgrid<-factor(data$IDgrid);
levels(data$IDNgrid)<-seq_along(levels(data$IDNgrid));

## If you want total grid-cell count repeated for each observation falling into that grid cell, do this:
data$count<- ave(data$LATITUDE,data$IDNgrid,FUN=length);
## You could have also used data$LONGITUDE, doesn't matter in this case

## If you want just a table of counts at each grid-cell, do this:
aggregate(data$LATITUDE,data[,c('LATgrid','LONgrid','IDNgrid')],FUN=length);
## I included the LATgrid and LONgrid vectors so there would be some
## sort of descriptive reference accompanying the anonymous numbers in IDNgrid,
## but only IDNgrid is actually necessary

## If you want a really minimalist table, you could do this:
table(data$IDNgrid);

关于r - 计算网格中物种的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17801398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com