Você pode usar o raster
pacote para fazer o download dos dados do WorldClim, ver ?getdata
sobre resolução, variáveis e coordenadas.
Como exemplo:
library(raster)
library(sp)
r <- getData("worldclim",var="bio",res=10)
Bio 1 e Bio12 são a temperatura média anual e a precipitação anual:
r <- r[[c(1,12)]]
names(r) <- c("Temp","Prec")
Crio pontos aleatórios como exemplo; no seu caso, use coordenadas para criar um SpatialPoint
objeto.
points <- spsample(as(r@extent, 'SpatialPolygons'),n=100, type="random")
Finalmente, use extract
. Com cbind.data.frame
e coordinates
você obterá o desejo data.frame.
values <- extract(r,points)
df <- cbind.data.frame(coordinates(points),values)
Eu usei pontos aleatórios, então consegui muitos NA
. É de se esperar.
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ão esqueça que os dados do WorldClim têm um fator de escala de 10, assim Temp = -37
como -3,7 ºC.
Com o exemplo de coordenadas:
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
que é um quadro de dados de lats e longos do meu conjunto de dados. Então eu corro exatamente do jeito que você fez. No entanto, quando eu corrovalues
eu recebo um erro:not compatible with requested type
. Notei também que seuspoints
apenas marcas a extensão da amostra, mas não produz um vetor com coordenadas lat-longasspTransform
. Se você tiver coordenadas no DDMMSS, transforme-as em DD.MMM. Segundo, você escreveu sobre coordenadas diferentes, então eu interpreto como pontos, você pode usar polígonos com o mesmo esquema. Se você possui uma camada com essas informações, use-asshapefile
para carregá-las.spsample
requer um objeto espacial para definir limites de amostra. As entradas são grades, polígonos ou linhas. O que fiz foi usar a caixa de fronteira do WorlClim para definir a extensão da amostra. Fiz isso para dar um exemplo reproduzível na minha resposta. No seu caso, você não precisa usarspsample
, você já tem coordenadas para fazer a amostra.