<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div><span>Para que voê entenda o meu problema (ou pelo menos tente), vou mandar o código total. Já aviso que é um pouco complicado lol.</span></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: 'times new roman', 'new york', times, serif; background-color: transparent; font-style: normal;"><span><br></span></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: 'times new roman', 'new york', times, serif; background-color: transparent; font-style: normal;"><span>Basicamente, o primeiro loop é nas variáveis e o segundo loop é nos anos. O problema que eu mencionei no tópico ocorre no data.frame tmp.df1</span></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: 'times new roman', 'new york', times, serif; background-color: transparent; font-style:
normal;"><span><br></span></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: 'times new roman', 'new york', times, serif; background-color: transparent; font-style: normal;"><span>Veja abaixo o código:</span></div><div style="color: rgb(0, 0, 0); font-size: 16px; font-family: 'times new roman', 'new york', times, serif; background-color: transparent; font-style: normal;"><span><br></span></div><div id="yiv1132169581yui_3_7_2_86_1376062069691_61"><div style="font-size: 12pt;">------------------------------------------------------------------------------------------</div><div style="font-size: 12pt;">#!/usr/bin/ Rscript<br></div><div><div><br></div><div># Load required packages</div><div>library(raster)</div><div>library(ncdf4)</div><div>library(ggplot2)</div><div><br></div><div># Download and load data</div><div>url=('http://dl.dropboxusercontent.com/u/27700634/yearly.nc')</div><div>download.file(url, destfile =
"yearly.nc")</div><div>f <- ('yearly.nc')</div><div>nc <- nc_open (f)</div><div>vars <- names(nc$var)</div><div><br></div><div># First, loop over all variables</div><div>for( i in 2:nc$nvars ) {</div><div> v <- nc$var[[i]]</div><div> </div><div> if (v$ndims < 4) { # Only do if the variable has three dimensions</div><div> # Load files</div><div> s <- stack(f, varname=v$name)</div><div> </div><div> # Create empty data.frame</div><div> tmp.df1 <- data.frame(g=1, date=rep(NA, length(names(s))), values=NA)</div><div> </div><div> # Loop over years (names), average raster values and put in the data.frame</div><div> for ( j in 1:length(names(s)) ) {</div><div> tmp.df1$date[j] <- format(as.Date(gsub(pattern='\\.', replacement='-', substring (names(s)[j],2))))</div><div>
tmp.df1$values[j] <- mean(getValues(s[[j]]), na.rm = TRUE)</div><div> } # end loop over names</div><div> </div><div> # plot data</div><div> p <- ggplot(tmp.df1, aes(x=date, y=values, group=g))</div><div> print(p + geom_line() + theme_bw() + </div><div> labs(title = v$name) + # add title</div><div> labs(x= 'Year', y= v$units) ) # change axis names</div><div> </div><div> } # endif three dimensions</div><div> </div><div> else { # Only do if the variable has four dimensions</div><div> # Load PFT's/year. Note that in this case, level= # of year and the PFTs are the names?</div><div> # Hence, solution would be looping over levels for YEAR and loop over names for PFT's?</div><div> b1 <- brick(f,
varname=v$name, level=1, lvar=4)</div><div> b2 <- brick(f, varname=v$name, level=2, lvar=4)</div><div> b3 <- brick(f, varname=v$name, level=3, lvar=4)</div><div> b4 <- brick(f, varname=v$name, level=4, lvar=4)</div><div> s <- stack (b1, b2, b3, b4) # <- this DON'T work!!</div><div> # Create empty data.frame</div><div> #tmp.df2 <- data.frame(g=1, date=rep(NA, length(names(b))), values=NA)</div><div> </div><div> # Loop over years (names), extract raster mean values and put in the data.frame</div><div> #for ( k in 1:length(names(b)) ) {</div><div> #tmp.df1$date[k] <- </div><div> #tmp.df2$values[k] <- mean(getValues(b[[k]]), na.rm = TRUE)</div><div> </div><div> #} # end loop over dimensions</div><div> } # endif four
dimensions</div><div>} # end loop over variables</div><div style="font-size: 12pt;"><br></div></div></div><div style="background-color: transparent;"><span></span></div><div id="yiv1132169581yui_3_7_2_86_1376062069691_61" style="font-size: 12pt;"><div style="font-size: 12pt;">------------------------------------------------------------------------------------------</div></div><div></div><div> </div><div>Saudações,<br>--<br>Thiago V. dos Santos<br>PhD student<br>Land and Atmospheric Science<br>University of Minnesota<br>http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/index.htm<br>Phone: (612) 323 9898</div><div><br></div> <div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt;"> <div style="font-family: 'times new roman', 'new york', times, serif; font-size: 12pt;"> <div dir="ltr"> <hr size="1"> <font size="2" face="Arial"> <b><span style="font-weight:bold;">From:</span></b> Benilton
Carvalho <beniltoncarvalho@gmail.com><br> <b><span style="font-weight: bold;">To:</span></b> r-br <r-br@listas.c3sl.ufpr.br> <br> <b><span style="font-weight: bold;">Sent:</span></b> Friday, August 9, 2013 12:21 PM<br> <b><span style="font-weight: bold;">Subject:</span></b> Re: [R-br] Popular um data.frame em dois loops<br> </font> </div> <div class="y_msg_container"><br>realmente nao entendi 100% do q vc quer fazer, mas sera' que o<br>seguinte nao seria suficiente?<br><br>v1 = c('tair', 'tsoil', 'biomass', 'lai')<br>v2 = 2005:2007<br>v3 = seq(10, 40, 10)<br>expand.grid(var=v1, ano=v2, value=v3)<br><br>?<br><br>Em 9 de agosto de 2013 13:09, Tiago Souza Marçal<br><<a ymailto="mailto:tiagosouzamarcal@hotmail.com" href="mailto:tiagosouzamarcal@hotmail.com">tiagosouzamarcal@hotmail.com</a>> escreveu:<br>> Tente usar o for().<br>><br>> Att.<br>><br>> Tiago.<br>><br>><br>>
#################################################################<br>><br>> Tiago de Souza Marçal - Graduando em Agronomia pelo CCA-UFES<br>><br>> Bolsista de Iniciação Científica da área de Genética e Melhoramento de<br>> Plantas<br>><br>> #################################################################<br>><br>><br>> ________________________________<br>> Date: Fri, 9 Aug 2013 08:44:26 -0700<br>> From: <a ymailto="mailto:thi_veloso@yahoo.com.br" href="mailto:thi_veloso@yahoo.com.br">thi_veloso@yahoo.com.br</a><br>> To: <a ymailto="mailto:r-br@listas.c3sl.ufpr.br" href="mailto:r-br@listas.c3sl.ufpr.br">r-br@listas.c3sl.ufpr.br</a><br>> Subject: [R-br] Popular um data.frame em dois loops<br>><br>><br>> Pessoal,<br>><br>> Estou fazendo um loop para variáveis (tair, tsoil, biomass, lai) e dentro<br>> desse loop estou fazendo outro com anos (2005, 2006, 2007) etc.<br>><br>> Ao final
dos dois loops, gostaria de ter um data.frame assim:<br>><br>>> d<br>> var date value<br>> 1 tair 2005-01-01 10<br>> 2 tair 2006-01-01 20<br>> 3 tair 2007-01-01 30<br>> 4 tair 2008-01-01 40<br>> 5 tsoil 2005-01-01 10<br>> 6 tsoil 2006-01-01 20<br>> 7 tsoil 2007-01-01 30<br>> 8 tsoil 2008-01-01 40<br>> etc<br>> etc<br>><br>> Qual é o meio mais eficiente para fazer isso?<br>><br>> Talvez até exista uma forma mais rápida de fazer isso do que usar loops,<br>> então qualquer sugestão será muito bem-vinda.<br>><br>> Segue o CMR (que não está eficiente, é só para fins de compreensão do<br>> problema):<br>><br>> -------------------------------------------------------------------------------------------------------------<br>> library(raster)<br>><br>> # Create
random rasterstack and set names<br>> r1 <- r2 <- r3 <- r4 <- raster(nrow = 50, ncol = 100)<br>> r1[] <- 10<br>> r2[] <- 20<br>> r3[] <- 30<br>> r4[] <- 40<br>> s <- stack(r1, r2, r3, r4)<br>><br>> # Set years<br>> names(s) <- c('X2005.01.01', 'X2006.01.01', 'X2007.01.01', 'X2008.01.01')<br>><br>> # Create random variable names<br>> vars <- c('tempsoi', 'tempair', 'biomass', 'lai')<br>><br>> for( i in 1:length (vars) ) {<br>><br>> # Loop over years (names), extract raster average values and put in<br>> the data.frame<br>> d <- NULL<br>><br>> for ( j in 1:length (names(s)) ) {<br>> var <- vars[i]<br>> date <- format (as.Date (gsub (pattern='\\.', replacement='-',<br>> substring
(names(s)[j],2))))<br>> value <- mean (getValues (s[[j]]), na.rm = TRUE)<br>> d <- rbind (d, data.frame(var, date, value))<br>> } # end loop over names<br>><br>> } # end loop vars<br>><br>> -------------------------------------------------------------------------------------------------------------<br>><br>><br>> Saudações,<br>> --<br>> Thiago V. dos Santos<br>> PhD student<br>> Land and Atmospheric Science<br>> University of Minnesota<br>> <a href="http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/index.htm" target="_blank">http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/index.htm</a><br>> Phone: (612) 323 9898<br>><br>> _______________________________________________ R-br mailing list<br>> <a
ymailto="mailto:R-br@listas.c3sl.ufpr.br" href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>> <a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br </a>Leia o guia de<br>> postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forne�a c�digo m�nimo<br>> reproduz�vel.<br>><br>> _______________________________________________<br>> R-br mailing list<br>> <a ymailto="mailto:R-br@listas.c3sl.ufpr.br" href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>> <a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>> Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código<br>>
mínimo reproduzível.<br>_______________________________________________<br>R-br mailing list<br><a ymailto="mailto:R-br@listas.c3sl.ufpr.br" href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br><a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.<br><br></div> </div> </div> </div></body></html>