From 93ff9809829aef28d1dadbf70c5491cd28e1276f Mon Sep 17 00:00:00 2001
From: Georges Kunstler <Georges.Kunstler@gmail.com>
Date: Mon, 2 Sep 2013 15:18:51 +1000
Subject: [PATCH] modified Paracou and Swiss

---
 R/format.function.R        |  29 +++++++++++++++++++++++++++--
 merge.data.PARACOU.R       |  16 +++++++++++-----
 merge.data.SWISS.R         |  10 +++++++---
 ms/table.data.progress.ods | Bin 13392 -> 13580 bytes
 4 files changed, 45 insertions(+), 10 deletions(-)

diff --git a/R/format.function.R b/R/format.function.R
index b77dfd2..1f5255e 100644
--- a/R/format.function.R
+++ b/R/format.function.R
@@ -8,6 +8,19 @@
 ######
 ######
 ## FUNCTION TO PLOT MAP OF TREE
+##' .. Function to plot map of tree with circle function of their dbh..
+##'
+##' .. content for \details{} ..
+##' @title 
+##' @param plot.select the plot for which draw the map
+##' @param x 
+##' @param y 
+##' @param plot vectore of plot id for each tree
+##' @param D diameter in cm
+##' @param inches controling the circle size
+##' @param ... 
+##' @return 
+##' @author Kunstler
 fun.circles.plot <- function(plot.select,x,y,plot,D,inches,...){
 x.t <- x[plot==plot.select]
 y.t <- y[plot==plot.select]
@@ -108,8 +121,20 @@ print("columns removed")
 return( (data.merge))
 }
 
-#### function with X Y coordinates based on a neighborhood of radius R
-
+#### 
+##' .. function compute competition index with X Y coordinates based on a neighborhood of radius R ..
+##'
+##' .. content for \details{} ..
+##' @title 
+##' @param obs.id id of the observation (if one tree as multiple growth measurement one obs.id per measurment
+##' @param xy.table table with x.y of teh individual
+##' @param diam diam in cm
+##' @param sp species
+##' @param Rlim radius of neighborhood search
+##' @param parallel run in paralle or not ?
+##' @param rpuDist run with GPU distance computation
+##' @return a data frame with nrow = length of obs.id and ncol =unique(sp)
+##' @author Kunstler
 BA.SP.FUN.XY <-  function(obs.id,xy.table,diam,sp,Rlim,parallel=FALSE,rpuDist=FALSE){
 rownames(xy.table) <- obs.id
 if(rpuDist){
diff --git a/merge.data.PARACOU.R b/merge.data.PARACOU.R
index 0451855..f614a4c 100644
--- a/merge.data.PARACOU.R
+++ b/merge.data.PARACOU.R
@@ -1,12 +1,15 @@
 ### MERGE paracou DATA
 ### Edited by FH
-rm(list = ls()); source("./R/format.function.R"); library(reshape)
+rm(list = ls())
+source("./R/format.function.R")
+library(reshape)
 
 #########################
 ## READ DATA
 ####################
 ### read individuals tree data
-data.paracou <- read.table("./data/raw/DataParacou/20130717_paracou_1984_2012.csv",header=TRUE,stringsAsFactors=FALSE,sep = ";", na.strings = "NULL")
+data.paracou <- read.table("./data/raw/DataParacou/20130717_paracou_1984_2012.csv",
+                           header=TRUE,stringsAsFactors=FALSE,sep = ";", na.strings = "NULL")
 #barplot(apply(!is.na(data.paracou[,paste("circ_",1984:2012,sep="")]),MARGIN=2,FUN=sum),las=3)
 
 # select good columns
@@ -16,9 +19,12 @@ data.paracou <- data.paracou[,c("foret","parcelle","carre","arbre","vernaculaire
 colnames(data.paracou) <- c("forest","plot","subplot","tree","vernacular","taxonid","x","y","circum2001","code2001","circum2005","code2005","circum2009","code2009","yeardied","typedeath")
 
 ### change numeric separator
-for(k in 7:14) { 
-	data.paracou[,k] <- gsub(",",".",data.paracou[,k]); data.paracou[,k] <- as.numeric(data.paracou[,k]) } ## Replace all , in decimals with .
-data.paracou$treeid <- apply(data.paracou[,1:4],1,paste,collapse="."); ## Create a tree id
+numeric.col.name <-   c("x","y","circum2001","code2001","circum2005","code2005","circum2009","code2009")
+for(k in numeric.col.name){ 
+	data.paracou[,k] <- gsub(",",".",data.paracou[,k]); data.paracou[,k] <- as.numeric(data.paracou[,k])
+    } ## Replace all , in decimals with .
+
+data.paracou$treeid <- apply(data.paracou[,c("plot","subplot","tree")],1,paste,collapse="."); ## Create a tree id
 data.paracou <- data.paracou[,c(ncol(data.paracou),1:(ncol(data.paracou)-1))]	
 
 ## ## plot each plot
diff --git a/merge.data.SWISS.R b/merge.data.SWISS.R
index 5bbef52..96ce7cc 100644
--- a/merge.data.SWISS.R
+++ b/merge.data.SWISS.R
@@ -11,8 +11,12 @@ data.swiss2 <- read.csv("./data/raw/DataSwiss/LFI23.csv",header=TRUE,stringsAsFa
 data.swiss3 <- read.csv("./data/raw/DataSwiss/LFI34.csv",header=TRUE,stringsAsFactors =FALSE)
 data.swiss <- rbind(data.swiss1, data.swiss2, data.swiss3)
 rm(data.swiss1, data.swiss2, data.swiss3)
-data.swiss <- data.swiss[order(data.swiss$BANR),]; data.swiss <- data.swiss[,c(2:19)]
-colnames(data.swiss) <- c("Inventid","siteid","treeid","x","y","spcode","sp.name","year","dbh1","dbh2","ba1","ba2","ba_diff","dbh_diff","repfactor1","repfactor2","ht1","ht2")
+data.swiss <- data.swiss[order(data.swiss$BANR),]
+data.swiss <- data.swiss[,c("INVNR","CLNR","BANR","X","Y","BAUMART","TEXT","VEGPER",
+                            "BHD1","BHD2","BA1","BA2","BAI","BHD_DIFF","RPSTZ1","RPSTZ2","HOEHE1","HOEHE2")]
+
+colnames(data.swiss) <- c("Inventid","siteid","treeid","x","y","spcode","sp.name","year",
+                          "dbh1","dbh2","ba1","ba2","ba_diff","dbh_diff","repfactor1","repfactor2","ht1","ht2")
 
 ## Do not need to read in spp list as it is already available in data.swiss
 
@@ -42,7 +46,7 @@ data.swiss$htot <- data.swiss$ht1 ## height of tree in m
 ## ECOREGION
 ###################
 ## Ecoregion not available for swiss data 
-
+data.swiss$ecocode <- rep("A",nrow(data.swiss))
 ######################
 ## PERCENT DEAD
 ###################
diff --git a/ms/table.data.progress.ods b/ms/table.data.progress.ods
index 68bea2a36535ac1b09a0092518bfdb1e7801c0a7..45ad7a04fb61990b230d2d804cdfdd98e5175b1e 100644
GIT binary patch
delta 4091
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
JQw#JM{THZhV;KMd

delta 3933
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

-- 
GitLab