R/sitree2dataframe.R

Defines functions sitree2dataframe.all sitree2dataframe

Documented in sitree2dataframe sitree2dataframe.all

## It will return a list with 4data.frames
## (1) live trees
## (2) dead trees
## (3) harvested trees
sitree2dataframe <- function(tr.dt){ 
	## just to make cran happy
i.height.dm <- tree.sp <- treeid <- plot.id <- NULL


  if (!(is(tr.dt, 'trList') | is(tr.dt,  'trListDead'))) stop('the object is not of class trList')
  if (is(tr.dt, 'trList')){
    period.names <-  names(tr.dt$data$dbh.mm)
    dbh.mm <- data.table(tr.dt$data$dbh.mm)
    dbh.mm[, treeid := tr.dt$data$treeid]
    dbh.mm[, plot.id := tr.dt$data$plot.id]
    dbh.mm[, tree.sp := tr.dt$data$tree.sp]
    height.dm <- data.table(tr.dt$data$height.dm)
    height.dm[, treeid := dbh.mm$treeid]
    dbh.mm <- data.table::melt(dbh.mm  ,
                               measure.vars = period.names,
                               variable.name = 'period',
                               value.name = "dbh.mm")
    height.dm <- data.table::melt(height.dm  ,
                                  measure.vars = period.names,
                                  variable.name = 'period',
                                  value.name = "height.dm")
    
    dbh.mm[height.dm, height.dm := i.height.dm, on =c('treeid', 'period')]
    return(as.data.frame(dbh.mm))
  }
  if (is(tr.dt, 'trListDead')){ ## for dead and harvested
    dead <- tr.dt$last.measurement
    dead$tree.sp <- tr.dt$data$tree.sp
    return(dead)
  }
  
}

sitree2dataframe.all <- function(sitree.res){
  list(
    live = sitree2dataframe(sitree.res$live),
    dead = sitree2dataframe(sitree.res$dead),
    removed =sitree2dataframe(sitree.res$removed)
  ) 
}

## dcast
## melt

Try the sitree package in your browser

Any scripts or data that you put into this service are public.

sitree documentation built on April 28, 2022, 5:06 p.m.