Vous pouvez utiliser le raster
package pour télécharger les données WorldClim, voir ?getdata
pour connaître la résolution, les variables et les coordonnées.
Comme exemple:
library(raster)
library(sp)
r <- getData("worldclim",var="bio",res=10)
Bio 1 et Bio12 sont la température annuelle moyenne et les précipitations annuelles:
r <- r[[c(1,12)]]
names(r) <- c("Temp","Prec")
Je crée des points aléatoires comme exemple, dans votre cas, utilisez des coordonnées pour créer un SpatialPoint
objet.
points <- spsample(as(r@extent, 'SpatialPolygons'),n=100, type="random")
Enfin, utilisez extract
. Avec cbind.data.frame
et coordinates
vous obtiendrez le désir data.frame.
values <- extract(r,points)
df <- cbind.data.frame(coordinates(points),values)
J'ai utilisé des points aléatoires, donc j'en ai eu beaucoup NA
. Il faut s'y attendre.
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)
N'oubliez pas que les données WorldClim ont un facteur d'échelle de 10, donc Temp = -37
-3,7 ºC.
Avec exemple de coordonnées:
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
qui est une trame de données de lats et longs de mon ensemble de données. Ensuite, je cours exactement comme vous. Cependant, quand je lance quevalues
je reçois une erreur:not compatible with requested type
. J'ai également remarqué que votrepoints
marque juste l'étendue de l'échantillon, mais ne produit pas un vecteur avec des coordonnées lat-longspTransform
. Si vous avez des coordonnées dans DDMMSS, transformez-les en DD.MMM. Deuxièmement, vous avez écrit sur différentes coordonnées, donc je l'interprète comme des points, vous pouvez utiliser des polygones à la place avec le même schéma. Si vous disposez d'une couche contenant ces informations, utilisez-lashapefile
pour la charger.spsample
nécessite un objet spatial pour définir les limites de l'échantillon. Les entrées sont des grilles, des polygones ou des lignes. Ce que j'ai fait était d'utiliser la boîte de délimitation WorlClim pour définir l'étendue de l'échantillon. Je l'ai fait pour faire un exemple reproductible dans ma réponse. Dans votre cas, vous n'avez pas besoin d'utiliserspsample
, vous avez déjà des coordonnées à échantillonner.