[R-br] Popular um data.frame em dois loops

Thiago V. dos Santos thi_veloso em yahoo.com.br
Sexta Agosto 9 12:44:26 BRT 2013


Pessoal,

Estou fazendo um loop para variáveis (tair, tsoil, biomass, lai) e dentro desse loop estou fazendo outro com anos (2005, 2006, 2007) etc.

Ao final dos dois loops, gostaria de ter um data.frame assim:

> d
  var       date value
1 tair 2005-01-01    10
2 tair 2006-01-01    20
3 tair 2007-01-01    30
4 tair 2008-01-01    40
5 tsoil 2005-01-01   10

6 tsoil 2006-01-01   20
7 tsoil 2007-01-01   30
8 tsoil 2008-01-01   40
etc
etc

Qual é o meio mais eficiente para fazer isso?

Talvez até exista uma forma mais rápida de fazer isso do que usar loops, então qualquer sugestão será muito bem-vinda.

Segue o CMR (que não está eficiente, é só para fins de compreensão do problema):

-------------------------------------------------------------------------------------------------------------
library(raster)



# Create random rasterstack and set names
r1 <- r2 <- r3 <- r4 <- raster(nrow = 50, ncol = 100)
r1[] <- 10
r2[] <- 20
r3[] <- 30
r4[] <- 40
s <- stack(r1, r2, r3, r4)

# Set years
names(s) <- c('X2005.01.01', 'X2006.01.01', 'X2007.01.01', 'X2008.01.01')

# Create random variable names
vars <- c('tempsoi', 'tempair', 'biomass', 'lai')

for( i in 1:length (vars) ) {
    
      # Loop over years (names), extract raster average values and put in the data.frame
      d <- NULL
    
      for ( j in 1:length (names(s)) ) {
            var   <- vars[i]
            date  <- format (as.Date (gsub (pattern='\\.', replacement='-', substring (names(s)[j],2))))
            value <- mean (getValues (s[[j]]), na.rm = TRUE)
            d     <- rbind (d, data.frame(var, date, value))
      } # end loop over names
      
} # end loop vars

-------------------------------------------------------------------------------------------------------------



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
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20130809/2d66fd98/attachment.html>


Mais detalhes sobre a lista de discussão R-br