问题描述
我正在尝试将生成的“ im”像素图像转换为光栅图像。 “ im”是使用以下代码创建的:
library(sf)
library(spatstat)
library(rgeos)
library(raster)
# read ebird data
ebd_species <- ("ebd_hooded.txt") %>%
read_ebd()
# extracting coordinates
latitude_species <- ebd_species$latitude
longitude_species <- ebd_species$longitude
#convert to spatial object
coordinates1 <- data.frame(x = longitude_species,y = latitude_species) %>% st_as_sf(coords = c("x","y"))
# converting to point pattern data
coordinates <- as.ppp(coordinates1)
# density image
a <- density(coordinates,2)
plot(a)
这是我得到的情节: plot
我想要做的是将其转换为栅格。然后,我想使用ebird数据的坐标从栅格中提取密度值。
解决方法
在询问R问题时,请提供一个最小的,独立的,可复制的示例。也就是说,不要显示您的实际代码,尤其是当它引用我们没有的数据时,而是显示类似的代码(基于?im
中的第一个示例):
library(spatstat)
mat <- matrix(1:1200,nrow=30,ncol=40,byrow=TRUE)
m <- im(mat)
解决方案
library(raster)
r <- raster(m)
,
好像您在spatstat中直接使用地理坐标(经度,纬度)。您确定这在您的情况下还可以吗?对于远离赤道的地区,这可能会产生误导。考虑使用sf::st_transform()
投影到平面坐标(有关此操作,请参见本网站上我的其他答案)。另外,在sf
的较新版本中,您可以使用以下命令直接将sf
转换为spatstat
格式。 as.ppp()
。
如果要对数据点处的强度进行核密度估计,可以使用at = "points"
中的选项density.ppp()
:
a <- density(coordinates,2,at = "points")
那么a
就是一个向量,其长度等于包含每个数据点强度估计值的点数。默认情况下,这会使用“留一法”估计来最大程度地减少偏差(请参见density.ppp
的帮助文件)。