Olá Cesar, Muito obrigada pela sua sugestão. Vamos ver como soluciono este problema.
Abraço, Heloise. 2017-09-10 10:05 GMT+12:00 Cesar Rabak <cesar.ra...@gmail.com>: > Heloíse, > > Você se fez entender e de fato você tem duas particularidades: seu grid e > coordenadas de vento além de terem granularidades diferentes têm um ligeiro > *offset* que se mostra como você descreve. > > Se as coordenadas do vento (que têm a maior granularidade) fossem > arrendondadas para décimo de grau elas teriam o seguinte "passo": > > Pegando o seu exemplo: > > > round(vento[1:5,1],1) > [1] -23.9 -23.6 -23.4 -23.1 -22.9 > > Note que as frações seriam apenas quatro e com espaçamentos "não > equidistantes", por consequência do arredondamento eles se alternam em 0,3 > e 0,2 grau... > > Se com essas "coincidências" no grid você conseguir fazer sua análise, é o > "automatismo" mais simples que se pode pensar... > > Caso contrário, você precisará escrever o script para o interpolador > bivariado, levando em conta que mesmo o *thin plate splines* funcionará > muito mais como uma régua flexível ("japonesa", ou como a antiga "curva > francesa") que tentará heurística e localmente adaptar-se aos dados sem > levar em conta a física do vento, por isso uma análise dos resultados seria > necessária, especialmente por que, imagino, as informações de vento trazem > também a direção de onde sopram. . . > > HTH > -- > Cesar Rabak > > > 2017-09-06 19:19 GMT-03:00 Heloíse Pavanato <helopavan...@gmail.com>: > >> Olá Cesar e Elias, >> >> Obrigada pela atenção. Vou dar uma olhada no pacote spatstat. >> >> Cesar, respondo em linha: >> >> As coordenadas do grid e vento múltiplas de 0,5 grau deveriam "se >> corresponder" ou não? >> >> Sim, mas não como os dados estão agora. Por exemplo, entre as latitudes >> de vento de -10.875 e -10.625 a correspondência no grid seria -10.8 e >> -10.7. Entre -10.625 e -10.375 as correspondências seriam -10.6, -10.5 e >> -10.4. >> Não sei como automatizar estre processo, pois veja que para as latitudes >> de vento que terminam com "75" eu tenho duas correspondências e para as que >> terminam em "25" eu tenho três. Me fiz entender? >> >> Aqui vai um dput() dos dados para você ter uma noção: >> >> >> dput(vento[1:30, ]) >> >> >> structure(list(lat = c(-23.875, -23.625, -23.375, -23.125, -22.875, >> >> -22.625, -22.375, -22.125, -21.875, -21.625, -21.375, -21.125, >> >> -20.875, -20.625, -20.375, -20.125, -19.875, -19.625, -19.375, >> >> -19.125, -18.875, -18.625, -18.375, -18.125, -17.875, -17.625, >> >> -17.375, -17.125, -16.875, -16.625), lon = c(-42.875, -42.875, >> >> -42.875, -42.875, -42.875, -42.875, -42.875, -42.875, -42.875, >> >> -42.875, -42.875, -42.875, -42.875, -42.875, -42.875, -42.875, >> >> -42.875, -42.875, -42.875, -42.875, -42.875, -42.875, -42.875, >> >> -42.875, -42.875, -42.875, -42.875, -42.875, -42.875, -42.875 >> >> ), media = c(6.16, 5.99714285714286, 5.91857142857143, 5.82, >> >> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, >> >> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), .Names = c("lat", "lon", >> >> "media"), row.names = c(NA, 30L), class = "data.frame") >> >> >> dput(grid[1:30, ]) >> >> >> structure(list(lat = c(-10.4, -10.4, -10.5, -10.5, -10.6, -10.6, >> >> -10.6, -10.5, -10.5, -10.6, -10.7, -10.7, -10.7, -10.7, -10.8, >> >> -10.8, -10.8, -10.9, -10.9, -10.9, -10.8, -10.8, -10.9, -11, >> >> -11, -11, -10.8, -10.9, -10.9, -11), lon = c(-36.4, -36.3, -36.5, >> >> -36.3, -36.5, -36.4, -36.3, -36.6, -36.4, -36.6, -36.6, -36.5, >> >> -36.4, -36.3, -36.6, -36.5, -36.4, -36.6, -36.5, -36.4, -37, >> >> -36.9, -36.9, -37.1, -37, -36.9, -36.8, -37, -36.8, -36.8)), .Names = >> c("lat", >> >> "lon"), row.names = c(NA, 30L), class = "data.frame") >> >> >> A questão de você interpolar os valores de vento tem menos a ver com o R >> em si e mais com o domínio do problema que você trabalha: qual é a forma de >> interpolar o valor do vento para uma coordenada intermediária entre pontos >> que você tenha as medidas? >> >> Talvez seja mais apropriado trabalhar com "a quase metade dos dados" do >> que utilizar o dobro de pontos sendo que a outra metade será resultado de >> um processo de cálculo e portanto não deveria modificar sua análise dos >> dados. >> >> Também acho que a interpolação é o menos importante para fins de >> análises, e posso manter NAs para isso. Porém, tenho que gerar um >> levelplot() desta e de outras variáveis, por isso gostaria de usar a >> interpolação para este fim. Pensei em usar thin plate splines ou qualquer >> outro interpolador bivariado em termos de latitude e longitude. >> >> Obrigada pela ajuda. >> >> Saudações, >> Heloise >> >> 2017-09-07 0:08 GMT+12:00 Cesar Rabak <cesar.ra...@gmail.com>: >> >>> Heloise, >>> >>> Esta observação me deixa confuso: >>> >>> #Quando faço um merge() dos dois dataframes, obviamente meus valores de >>>> #vento$media aparecem como NA pois não há nenhuma correspondência >>>> entre as #coordenadas do grid e de vento. >>> >>> >>> As coordenadas do grid e vento múltiplas de 0,5 grau deveriam "se >>> corresponder" ou não? >>> >>> A questão de você interpolar os valores de vento tem menos a ver com o R >>> em si e mais com o domínio do problema que você trabalha: qual é a forma de >>> interpolar o valor do vento para uma coordenada intermediária entre pontos >>> que você tenha as medidas? >>> >>> Talvez seja mais apropriado trabalhar com "a quase metade dos dados" do >>> que utilizar o dobro de pontos sendo que a outra metade será resultado de >>> um processo de cálculo e portanto não deveria modificar sua análise dos >>> dados. >>> >>> HTH >>> -- >>> Cesar Rabak >>> >>> >>> 2017-09-06 4:47 GMT-03:00 Heloíse Pavanato via R-br < >>> r-br@listas.c3sl.ufpr.br>: >>> >>>> Colegas do R-br, >>>> >>>> >>>> >>>> Tenho a seguinte questão: >>>> >>>> >>>> >>>> Estou trabalhando com um grid de 0.1 x 0.1 grau de latitude e longitude >>>> onde quero inserir a variável vento. No entanto a resolução do vento é >>>> de 0.25 x 0.25 graus. >>>> >>>> Os dados estão armazenados aqui: >>>> >>>> >>>> http://www.datafilehost.com/d/693635d4 >>>> >>>> http://www.datafilehost.com/d/ee24730c >>>> >>>> >>>> vento <- read.csv('ascat.data.csv', header = TRUE) >>>> >>>> str(vento) >>>> >>>> grid <- read.csv('grid.data.csv', header = TRUE) >>>> >>>> str(grid) >>>> >>>> >>>> #Quando faço um merge() dos dois dataframes, obviamente meus valores >>>> de #vento$media aparecem como NA pois não há nenhuma correspondência >>>> entre as #coordenadas do grid e de vento. >>>> >>>> >>>> dmerge <- merge(grid, vento, by = c('lon', 'lat'), all.x = TRUE) >>>> >>>> >>>> Porém, eu gostaria de obter valores de vento, por exemplo, entre >>>> latitudes de -22.625 e -22.375 na mesma escala do grid: -22.6, -22.5, >>>> -22.4, etc. E o mesmo para longitude. >>>> >>>> >>>> Tentei utilizar a scales::rescale(), mas consegui mudar apenas os >>>> mínimos e máximos das coordenadas: >>>> >>>> >>>> #install.packages('scales', dependencies = TRUE) >>>> >>>> library(scales) >>>> >>>> >>>> vento$lon.r <- rescale(vento$lon, to = range(grid$lon)) >>>> vento$lon.r >>>> >>>> >>>> vento$lat.r <- rescale(vento$lat, to = range(grid$lat)) >>>> vento$lat.r >>>> >>>> >>>> Então, creio que eu tenho dois problemas: o primeiro é obter as >>>> coordenadas de vento na mesma escala que as do grid; segundo é interpolar >>>> vento$media para substituir os NAs, que correspondem a quase metade do >>>> total de valores. >>>> >>>> >>>> Agradeço se algum colega tiver alguma dica. >>>> >>>> >>>> Obrigada, >>>> >>>> Heloise. >>>> >>>> _______________________________________________ >>>> R-br mailing list >>>> R-br@listas.c3sl.ufpr.br >>>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br >>>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça >>>> código mínimo reproduzível. >>>> >>> >>> >> >
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel.