来自点数据的存在-不存在数据
Presence- absence data from point data
拜托,我真的需要你的帮助。
我有一个点数据( Lon 和 Lat ),我想从中创建存在-不存在数据。我怎样才能在 R 中做到这一点?
例子
species lon lat
Oncorhynchus_kisutch -130.25 55.75
Oncorhynchus_kisutch -129.75 55.75
Oncorhynchus_kisutch -130.25 55.25
Oncorhynchus_kisutch -129.75 55.25
Oncorhynchus_kisutch -129.25 55.25
Oncorhynchus_kisutch -133.25 54.75
Oncorhynchus_kisutch -131.75 54.75
Oncorhynchus_kisutch -131.25 54.75
我希望点数据如下所示;
LAT: -90:0.25:90 ---> vector LAT 720
LON: -180: 0.25:180 ----> vector LON 1440
Cell no PAS
1 0
2 0
3 0
4 1
5 0
6 1
7 0
8 0
9 0
.
.
.
1039680 1
即纬度 720 和经度 1440。
可能有更简单的方法来做到这一点,但我做了以下事情:
- 创建已知分辨率的网格
- 查询 lon/lat 个匹配项并使 presence=1 匹配
(可选)转换为矩阵
# Load data
df <- read.table(text=
"species lon lat
Oncorhynchus_kisutch -130.25 55.75
Oncorhynchus_kisutch -129.75 55.75
Oncorhynchus_kisutch -130.25 55.25
Oncorhynchus_kisutch -129.75 55.25
Oncorhynchus_kisutch -129.25 55.25
Oncorhynchus_kisutch -133.25 54.75
Oncorhynchus_kisutch -131.75 54.75
Oncorhynchus_kisutch -131.25 54.75
",
header=TRUE
)
head(df)
# create grid
reso = 0.25
xs <- seq(-180, 180, by=reso)
ys <- seq(-90, 90, by=reso)
grd <- expand.grid(
x=xs,
y=ys,
presence=0
)
head(grd)
# query
for(i in seq(nrow(df))){
tmp <- which(df$lon[i] == grd$x & df$lat[i] == grd$y)
if(length(tmp)>0){
grd$presence[tmp] <- 1
}
}
png("plot.png", width=5, height=5, units="in", res=600, type="cairo")
plot(grd$x, grd$y, pch=1, cex=1, col=c(NA, 1)[grd$presence+1], lwd=0.5)
dev.off()
mat <- list(x=xs, y=ys, z=matrix(grd$presence, nrow=length(xs), ncol=length(ys)))
png("mat.png", width=5, height=5, units="in", res=600, type="cairo")
image(mat, useRaster=TRUE, col=c(NA, 1))
dev.off()
如果放大矩阵,您会看到黑色的存在网格。
拜托,我真的需要你的帮助。 我有一个点数据( Lon 和 Lat ),我想从中创建存在-不存在数据。我怎样才能在 R 中做到这一点? 例子
species lon lat
Oncorhynchus_kisutch -130.25 55.75
Oncorhynchus_kisutch -129.75 55.75
Oncorhynchus_kisutch -130.25 55.25
Oncorhynchus_kisutch -129.75 55.25
Oncorhynchus_kisutch -129.25 55.25
Oncorhynchus_kisutch -133.25 54.75
Oncorhynchus_kisutch -131.75 54.75
Oncorhynchus_kisutch -131.25 54.75
我希望点数据如下所示;
LAT: -90:0.25:90 ---> vector LAT 720
LON: -180: 0.25:180 ----> vector LON 1440
Cell no PAS
1 0
2 0
3 0
4 1
5 0
6 1
7 0
8 0
9 0
.
.
.
1039680 1
即纬度 720 和经度 1440。
可能有更简单的方法来做到这一点,但我做了以下事情:
- 创建已知分辨率的网格
- 查询 lon/lat 个匹配项并使 presence=1 匹配
(可选)转换为矩阵
# Load data df <- read.table(text= "species lon lat Oncorhynchus_kisutch -130.25 55.75 Oncorhynchus_kisutch -129.75 55.75 Oncorhynchus_kisutch -130.25 55.25 Oncorhynchus_kisutch -129.75 55.25 Oncorhynchus_kisutch -129.25 55.25 Oncorhynchus_kisutch -133.25 54.75 Oncorhynchus_kisutch -131.75 54.75 Oncorhynchus_kisutch -131.25 54.75 ", header=TRUE ) head(df) # create grid reso = 0.25 xs <- seq(-180, 180, by=reso) ys <- seq(-90, 90, by=reso) grd <- expand.grid( x=xs, y=ys, presence=0 ) head(grd) # query for(i in seq(nrow(df))){ tmp <- which(df$lon[i] == grd$x & df$lat[i] == grd$y) if(length(tmp)>0){ grd$presence[tmp] <- 1 } } png("plot.png", width=5, height=5, units="in", res=600, type="cairo") plot(grd$x, grd$y, pch=1, cex=1, col=c(NA, 1)[grd$presence+1], lwd=0.5) dev.off()
mat <- list(x=xs, y=ys, z=matrix(grd$presence, nrow=length(xs), ncol=length(ys))) png("mat.png", width=5, height=5, units="in", res=600, type="cairo") image(mat, useRaster=TRUE, col=c(NA, 1)) dev.off()
如果放大矩阵,您会看到黑色的存在网格。