Como
eu baixo este pacote ncdf4, quando eu tento baixá-lo diz que não está disponível na
versão R 3.1
Humberto,
Obrigado pelo exemplo
completamente reprodutível.
O pacote ncdf não é mais
atualizado pelo David Pierce e muito em breve o seu codigo pode nao mais
funcionar. Use o ncdf4, que é mantido e regularmente atualizado. Ao fazer isso
você terá de reformular o código, por exemplo 'open.ncdf' vira 'nc_open', mas
dessa forma você garante que o seu codigo continue funcionando pelos próximos
anos.
A solucao ideal para o seu
problema seria usar a funcao 'rotate' do pacote raster mas isso não é possível
porque a grade do seu arquivo não é regular. Dessa forma a minha sugestão para
reprojetar a longitude 'na marra' é:
new_lon = ((lon + 180) %%
360) - 180
A diferença de 0.5 grau entre
o que eu recomendo e o que você espera se deve à implementação de cada
software: em alguns a coordenada é do canto da grade, enquanto em outros a
coordenada é do centro da grade. Ajuste o resultado conforme a sua necessidade
(i.e. new_lon <- new_lon + 0.5).
Por último, note também que o
seu vetor de datas está incorreto porque está sendo criado de uma origem
diferente da origem embebida no netcdf (ano 1900 ao invés de 1800). Uma solucao
que resgata os valores de data diretamente do arquivo é a seguinte (note que as
funções já são do ncdf4):
# get time dimension
t <-
ncvar_get(nc,"time")
tunits <-
ncatt_get(nc,"time","units")
# show "real" times
tustr <-
strsplit(tunits$value, " ")
tdstr <-
strsplit(unlist(tustr)[3], "-")
tmonth <-
as.integer(unlist(tdstr)[2])
tday <- as.integer(unlist(tdstr)[3])
tyear <-
as.integer(unlist(tdstr)[1])
ndate <- as.Date(chron(t,
out.format='year-month-day', origin=c(tmonth, tday, tyear)))
O vetor ndate serve para
visualização das datas em um formato "humano", mas se você vai
recriar o arquivo, provavelmente você montará a dimensao de tempo usando o
vetor "t".
Saudações,
--
Thiago V. dos Santos
PhD student
Land and Atmospheric Science
University of Minnesota
http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/index.htm
Phone: (612) 323 9898
On Thursday, December 4, 2014
8:56 PM, Humberto <hghazin@hotmail.com> wrote:
Boa noite pessoal,
Estou extraindo de um arquivo ncdf os valores de latitude (lat)
longitude( lon) e temperatura da superfície da agua do mar( SST),
entretanto a longitude (lon) ela está na projeção 0 a 360 graus. Minha pergunta
é como faço para converter ela para -180 a 180 graus? Segue o script que estou
utilizando juntamente com o link dos dados.
Desde já agradeço a ajuda
Humberto
lon |
lat |
data |
sst |
Lon como deveria ser |
|
299.5 |
10.5 |
11/30/1981 |
27.85 |
|
-60.000 |
300.5 |
10.5 |
11/30/1981 |
27.96 |
|
-59.500 |
301.5 |
10.5 |
11/30/1981 |
28.02 |
|
-58.500 |
302.5 |
10.5 |
11/30/1981 |
28.02 |
|
-57.500 |
303.5 |
10.5 |
11/30/1981 |
27.97 |
|
-56.500 |
304.5 |
10.5 |
11/30/1981 |
27.84 |
|
-55.500 |
305.5 |
10.5 |
11/30/1981 |
27.81 |
|
-54.500 |
306.5 |
10.5 |
11/30/1981 |
27.78 |
|
-53.500 |
307.5 |
10.5 |
11/30/1981 |
27.75 |
|
-52.500 |
Link para acesso dos dados https://www.dropbox.com/s/xnab2g365mduykx/SST_81_14.nc?dl=0
Script:
require(ncdf) #'ncdf' versao 1.6.6
require(reshape)
require(chron)
###sst
nc <- open.ncdf("SST_81_14.nc")
nc
lat <- get.var.ncdf(nc,
"lat")
lon <- get.var.ncdf(nc,
"lon")
tunits <-
att.get.ncdf(nc,"time","units")
# print tunits
tunits$value
# criar tempo "real" Times
time<-
get.var.ncdf(nc,"time")
Time<-chron(time,origin=c(month=1,
day=1, year=1900))
## array da variavel sst
wm <- get.var.ncdf(nc, "sst")
str(wm)
## atribuindo dimnames conforme lon, lat e tempo
dimnames(wm)[[1]] <- as.character(lon)
dimnames(wm)[[2]] <- as.character(lat)
dimnames(wm)[[3]] <-
as.character(Time)
str(wm)
## melt para reestruturação dos dados
mwm <- melt(wm)
head(mwm)
![]() |
Este email foi escaneado pelo Avast antivírus.
|