Możesz użyć raster
pakietu do pobrania danych WorldClim, dowiedzieć ?getdata
się o rozdzielczości, zmiennych i współrzędnych.
Jako przykład:
library(raster)
library(sp)
r <- getData("worldclim",var="bio",res=10)
Bio 1 i Bio12 to średnia roczna temperatura i roczne opady:
r <- r[[c(1,12)]]
names(r) <- c("Temp","Prec")
Jako przykład tworzę losowe punkty, w twoim przypadku użyj współrzędnych, aby utworzyć SpatialPoint
obiekt.
points <- spsample(as(r@extent, 'SpatialPolygons'),n=100, type="random")
Wreszcie użyj extract
. Z cbind.data.frame
a coordinates
dostaniesz data.frame pragnienie.
values <- extract(r,points)
df <- cbind.data.frame(coordinates(points),values)
Użyłem losowych punktów, więc mam ich dużo NA
. Należy się tego spodziewać.
head(df)
x y Temp Prec
1 112.95985 52.092650 -37 388
2 163.54612 85.281643 NA NA
3 30.95257 5.932434 270 950
4 64.66979 40.912583 150 150
5 -169.40479 -58.889104 NA NA
6 51.46045 54.813600 36 549
plot(r[[1]])
plot(points,add=T)
Nie zapominaj, że dane WorldClim mają współczynnik skali 10, a więc Temp = -37
-3,7 ºC.
Przykładem współrzędnych:
library(raster)
library(sp)
r <- getData("worldclim",var="bio",res=10)
r <- r[[c(1,12)]]
names(r) <- c("Temp","Prec")
lats <- c(9.093028 , 9.396111, 9.161417)
lons <- c(-11.7235, -11.72975, -11.709417)
coords <- data.frame(x=lons,y=lats)
points <- SpatialPoints(coords, proj4string = r@crs)
values <- extract(r,points)
df <- cbind.data.frame(coordinates(points),values)
df
x y Temp Prec
1 -11.72350 9.093028 257 2752
2 -11.72975 9.396111 257 2377
3 -11.70942 9.161417 257 2752
points
która jest ramką danych łat i długości mojego zestawu danych. Potem biegnę dokładnie tak jak ty. Jednak gdy uruchamiamvalues
pojawia się błąd:not compatible with requested type
. Zauważyłem również, żepoints
po prostu zaznaczasz zasięg próbki, ale nie tworzysz wektora o współrzędnych długościspTransform
. Jeśli masz współrzędne w DDMMSS, przekształć je w DD.MMM. Po drugie, pisałeś o różnych współrzędnych, więc interpretuję to jako punkty, zamiast tego możesz używać wielokątów z tym samym schematem. Jeśli masz warstwę z tymi informacjami, użyj,shapefile
aby ją załadować.spsample
wymaga obiektu przestrzennego do ustawienia granic próbki. Dane wejściowe to siatki, wielokąty lub linie. To, co zrobiłem, to użyć ramki granicznej WorlClim do ustawienia zakresu próbki. Zrobiłem to, aby dać powtarzalny przykład w mojej odpowiedzi. W twoim przypadku nie musisz używaćspsample
, masz już współrzędne do próbkowania.