Andrew MacDonald, Dézerald Olivier, Nicholas Marino, A.D. Letaw, & Ethan White. (2017, December 20). SrivastavaLab/bwgtools: First release of bwgtools (Version 1.0.0). Zenodo. http://doi.org/10.5281/zenodo.1120419
This is an R package for the bromeliad working group rainfall experiment. Our intention is to create a set of tools that facilitate all steps of the process:
At present the package allows each group of authors to obtain the datasets they will need to begin their analysis.
Please open an issue if there is a feature you would like to see, or if you discover an error or bug!
bwgtools
can be installed directly from Github using devtools:
install.packages("devtools") # if you don't have devtools
library(devtools)
install_github("SrivastavaLab/bwgtools", dependencies = TRUE)
bwgtools
uses rdrop2 to access
your Dropbox account, then uses
readxl to download the data and read
it directly into R. When you first run library(bwgtools)
you will see
the following message:
library(bwgtools)
## Welcome to the bwg R package! in order to obtain data from the BWG dropbox folder, you need to authorize R to access your dropbox. run the following commands:
## library(rdrop2)
## drop_auth(cache = FALSE)
## Then enter your username and password. This should only need to be done when downloading the data.
In Dropbox: by default, drop_auth()
saves your Dropbox login to a
file called .httr-oauth
. Of course, we don't want this shared with
everyone in our Dropbox folder, as they would then be able to access
your personal Dropbox account! Therefore, we set cache=FALSE
. This
will require us to re-authenticate every time we want to download fresh
data. This should be a quick and painless process, especially if you are
already logged in on your computer. However, bwgtools should work from
any computer connected to the internet, provided that you have your
Dropbox username and password.
Working outside of Dropbox: running drop_acc()
or drop_auth()
will create a file called .httr-oauth
in your directory, which will
contain your login credentials for Dropbox. Remember to add this file
to your .gitignore if you are using git. For more information, see
?rdrop2::drop_auth
.
Once you have authenticated with Dropbox, you can read data directly
into R. To obtain a single tab (for example, the "leaf.waterdepths" tab)
for a single site (for example, Macae), use the function
read_sheet_site
:
macae <- read_site_sheet("Macae", "leaf.waterdepths")
## [1] "fetching from dropbox"
##
## /tmp/Rtmpcs0nbf/Drought_data_Macae.xlsx on disk 311.868 KB
knitr::kable(head(macae))
site
trt.name
bromeliad.id
date
depth.centre.measure.first
depth.leafa.measure.first
depth.leafb.measure.first
depth.centre.water.first
depth.leafa.water.first
depth.leafb.water.first
macae
mu0.1k0.5
B24
2013-03-15
NA
NA
NA
147.0
0.0
60.0
macae
mu0.1k0.5
B24
2013-03-16
NA
NA
NA
133.3
31.6
53.3
macae
mu0.1k0.5
B24
2013-03-17
NA
NA
NA
111.0
5.3
65.1
macae
mu0.1k0.5
B24
2013-03-18
NA
NA
NA
107.2
12.6
67.2
macae
mu0.1k0.5
B24
2013-03-19
NA
NA
NA
104.8
21.5
53.4
macae
mu0.1k0.5
B24
2013-03-20
NA
NA
NA
94.3
20.2
74.3
The first argument to this function can either be the name of a site
("Macae"
, in the example above), or a path to the location of the
file on your hard drive. For example, on my (Andrew's) computer, the
path to Dropbox is:
../../../Dropbox
So I could read in my local copy of the data like this:
macae <- read_site_sheet("../../../Dropbox/BWG Drought Experiment/raw data/Drought_data_Macae.xlsx", "leaf.waterdepths")
## you downloaded that file already! reading from disk
This is an example of a relative path; the symbol ..
means "one
directory above my current location". This is the relative path from
the directory where I am developing bwgtools
to the directory where
the Macae data is stored, on my machine. There is more information about
relative paths
here.
To save typing, I've made a convenience function that fills in the relative path for you. It requires the name of the sheet you want, and the path from your current working directory to the full Dropbox folder:
macae <- read_site_sheet(offline("Macae", default.path = "../../../Dropbox/"), "leaf.waterdepths")
## you downloaded that file already! reading from disk
## or, equivalently:
library(magrittr)
macae <- "Macae" %>%
offline(default.path = "../../../Dropbox/") %>% ## use your own path
read_site_sheet(sheetname = "leaf.waterdepths")
## you downloaded that file already! reading from disk
PLEASE NOTE: the major disadvantage of this approach is that your local version of the data may be behind the official version on the Dropbox website. To be safe, use the online version whenever you can.
For all our analyses, we will need to collect data from all sites. ; we
can also load and combine the same tab across all sites, with a single
function: combine_tab()
. This function has two arguments: the first is
a vector of all the site names (as spelt in the file names in the
raw data/
folder). The second is the name of the sheet to read (as
above). For example, to obtain the "site.info" tab for all sites, use
the following command:
library(dplyr)
library(knitr)
c("Argentina", "French_Guiana", "Colombia",
"Macae", "PuertoRico","CostaRica") %>%
combine_tab(sheetname = "site.info") %>%
head %>%
kable
[1] "fetching from dropbox" [1] "fetching from dropbox" [1] "fetching from dropbox" [1] "fetching from dropbox" [1] "fetching from dropbox"
site.name combined.correction.factor mean.catchment.area effective.catchment.area identity.bromeliad.species natural.detrital.species.1.15n natural.detrital.species.2.15n fertilized.detrital.species.1.15n fertilized.detrital.species.2.15n natural.bromeliad.15n natural.bromeliad.percentn natural.bromeliad.percentc identity.15n.detrital.species.1 identity.15n.detrital.species.2 identity.leafpack.species.1 identity.leafpack.species.2 start.water.addition last.day.sample ibutton.frequency argentina 0.3570 1039.533 371.1133 aechmea.distichantha NA NA NA NA NA NA NA NA NA myrcianthes.cisplatensis NA 2013-10-10 2013-12-16 hour frenchguiana 0.3800 1060.000 402.8000 vriesea.splendens 0.460000 NA 1148.70000 NA 1.860000 1.0400000 50.62000 Melastomataceae NA duguetia.pycnastera eperua.grandiflora 2012-11-01 2013-01-10 hour colombia 0.3613 2297.898 830.2305 Guzmania.spp -1.093333 -1.296667 0.36653 0.36701 -3.768889 0.5749411 45.09735 alnus.acuminata melastomatacea alnus.acuminata melastomatacea 2013-04-03 2013-06-09 hour macae 0.2700 1218.000 328.8600 neoregelia.cruenta NA NA 6984.80000 NA NA NA NA eugenia.uniflora NA eugenia.uniflora NA 2013-03-15 2013-05-21 hour puertorico 0.3877 1110.140 43.4013 guzmania NA NA NA NA -2.447934 1.0181657 48.83634 melostomataceae NA dacryodes.excelsa dendropanax.arboreus 2014-03-23 2014-05-29 hour costarica 0.3970 1622.000 643.9340 guzmania.spp NA NA NA NA -1.660000 0.4500000 43.78000 conostegia.xalapensis NA conostegia.xalapensis NA 2012-10-06 2012-12-14 hourcombine_tab()
does a little bit more than simply combine the output of
read_site_sheet()
. It also checks the names of the datasets before
combining, creates unique bromeliad id numbers, and reshapes the
invertebrate data from "wide" to "long" format. Here is a quick
explanation of each of these modifications in turn:
Many sites have simply numbered their bromeliads, meaning that there are
several bromeliads labelled "1", each in a different site. This is not
an error on the part of researchers, however it is a potential danger
when combining datasets. To make the bromeliad identification numbers
unambiguous, I have combined the site name and the bromeliad name into a
new variable, "site_brom.id
":
phys_data <- c("Argentina", "French_Guiana", "Colombia",
"Macae", "PuertoRico","CostaRica") %>%
combine_tab(sheetname = "bromeliad.physical")
## you downloaded that file already! reading from disk
## you downloaded that file already! reading from disk
## you downloaded that file already! reading from disk
## you downloaded that file already! reading from disk
## you downloaded that file already! reading from disk
## you downloaded that file already! reading from disk
kable(phys_data[1:6, 1:3])
site_brom.id
site
trt.name
argentina_1
argentina
mu0.1k0.5
argentina_26
argentina
mu0.2k0.5
argentina_30
argentina
mu0.4k0.5
argentina_20
argentina
mu0.6k0.5
argentina_29
argentina
mu0.8k0.5
argentina_15
argentina
mu1k0.5
Most of the tabs have a standard shape -- i.e. a fixed number of columns
and rows. The exception is two tabs that contain insect data:
bromeliad.initial.inverts
and bromeliad.final.inverts
. In order to
combine data from these datasets, it is necessary to convert them to
"long" format: i.e., to "gather" all insect columns into only three: one
for the name of the species (the former column header) one for
abundance, and another for biomass:
invert_data <- c("Argentina", "French_Guiana", "Colombia",
"Macae", "PuertoRico","CostaRica") %>%
combine_tab(sheetname = "bromeliad.final.inverts")
kable(invert_data[1:6, ])
site_brom.id
site
mu
k
species
abundance
biomass
argentina_1
argentina
0.1
0.5
Coleoptera.33
14
NA
argentina_1
argentina
0.1
0.5
Diptera.276
2
NA
argentina_1
argentina
0.1
0.5
Diptera.61
7
NA
argentina_10
argentina
2.5
1.0
Diptera.250
1
NA
argentina_10
argentina
2.5
1.0
Diptera.276
2
NA
argentina_10
argentina
2.5
1.0
Diptera.61
6
NA
Now that we can obtain data on all the invertebrates found at the end of the experiment, we can calculate the abundance and biomass of different functional groups by combining species that are in the same category. There are two levels of groups into which we can group species:
pred_prey func.group predator engulfer piercer prey scraper gatherer piercer shredderIn order to do this, we will need to access data about all the species
ever observed in bromeliads, combining their trait data with their BWG
nicknames (the column headers from bromeliad.final.invert
, now in the
column species
in the output of combine_tab()
). Formerly, this data
was kept in an excel sheet called "Distributions.organisms.correct.xls".
Now, several of us have embarked on a project to improve this data and
fill in blanks. The result
of these efforts (which are still ongoing, though mostly complete) is
this .tsv
file.
Eventually, it will be added to the master database that the BWG is
constructing. In the meantime, it can be downloaded directly from github
using get_bwg_names()
:
bwg_names <- get_bwg_names()
## this function thinks there are 23 character columns followed by 54 numeric columns
kable(head(bwg_names))
key
Name
nickname
Domain
Kingdom
Phyllum
Sub.Phyllum
Class
Sub.Class
Order
Sub.Order
Family
Sub.family
Genus
Species
Taxonomic.resolution
name1
name2
name3
aquatic.terrestrial
func.group
macro.micro
pred_prey
BS1
BS2
BS3
BS4
BS5
BS1.1
BS2.1
BS3.1
BS4.1
BS5.1
AS1
AS2
AS3
AS4
RE1
RE2
RE3
RE4
RE5
RE6
RE7
RE8
DM1
DM2
RF1
RF2
RF3
RF4
RM1
RM2
RM3
RM4
RM5
LO1
LO2
LO3
LO4
LO5
LO6
LO7
FD1
FD2
FD3
FD4
FD5
FD6
FD7
FD8
FG1
FG2
FG3
FG4
FG5
FG6
k1
Bryocamptus sp
Copepoda.1
Eukaryota
Animalia
Arthropoda
Crustacea
Maxillopoda
Copepoda
Harpacticoida
NA
Canthocamptidae
NA
Bryocamptus
NA
G
aquatic
filter.feeder
micro
prey
3
0
0
0
0
3
0
0
0
0
0
0
0
3
0
3
0
0
0
0
0
0
3
0
3
0
3
0
3
0
0
0
0
0
1
0
2
3
3
0
0
3
2
0
0
0
0
0
0
0
3
3
0
0
k2
Hydracarina
Acari.2
Eukaryota
Animalia
Arthropoda
Chelicerata
Arachnida
Acari
Trombidiformes
Hydracarina
NA
NA
NA
NA
SO
aquatic
gatherer
micro
prey
3
3
0
0
0
0
3
0
0
0
1
2
0
2
0
0
0
3
0
0
0
0
3
0
3
0
3
0
3
0
0
0
0
0
2
3
3
0
0
0
0
3
0
0
0
0
0
0
3
0
0
0
0
0
k3
Acari sp
Acari.1
Eukaryota
Animalia
Arthropoda
Chelicerata
Arachnida
Acari
NA
NA
NA
NA
NA
NA
O
NA
piercer
micro
predator
3
0
0
0
0
3
0
0
0
0
1
2
0
2
0
0
0
3
0
0
0
0
3
0
3
0
3
0
3
0
0
3
0
0
2
3
3
0
0
0
0
0
0
0
0
0
3
3
0
0
0
0
3
3
k4
Mite sp. 1
Acari.3
Eukaryota
Animalia
Arthropoda
Chelicerata
Arachnida
Acari
NA
NA
NA
NA
NA
NA
O
NA
piercer
micro
predator
3
0
0
0
0
3
0
0
0
0
1
2
0
2
0
0
0
3
0
0
0
0
3
0
3
0
3
0
3
0
0
3
0
0
2
3
3
0
0
0
0
0
0
0
0
0
3
3
0
0
0
0
3
3
k5
Mite sp. 2
Acari.4
Eukaryota
Animalia
Arthropoda
Chelicerata
Arachnida
Acari
NA
NA
NA
NA
NA
NA
O
NA
piercer
micro
predator
3
0
0
0
0
3
0
0
0
0
1
2
0
2
0
0
0
3
0
0
0
0
3
0
3
0
3
0
3
0
0
3
0
0
2
3
3
0
0
0
0
0
0
0
0
0
3
3
0
0
0
0
3
3
k6
Mite sp. 3
Acari.5
Eukaryota
Animalia
Arthropoda
Chelicerata
Arachnida
Acari
NA
NA
NA
NA
NA
NA
O
NA
piercer
micro
predator
3
0
0
0
0
3
0
0
0
0
1
2
0
2
0
0
0
3
0
0
0
0
3
0
3
0
3
0
3
0
0
3
0
0
2
3
3
0
0
0
0
0
0
0
0
0
3
3
0
0
0
0
3
3
The first step in combining the functional traits and the observed
insect data is to match insect names in both datasets. This is easily
accomplished by the base function merge()
or by dplyr::left_join()
.
For convenience, bwgtools::merge_func()
does the latter for you:
### merge with functional groups
invert_traits <- merge_func(invert_data, bwg_names)
kable(head(invert_traits))
site_brom.id
site
mu
k
species
abundance
biomass
key
Name
Domain
Kingdom
Phyllum
Sub.Phyllum
Class
Sub.Class
Order
Sub.Order
Family
Sub.family
Genus
Species
Taxonomic.resolution
name1
name2
name3
aquatic.terrestrial
func.group
macro.micro
pred_prey
BS1
BS2
BS3
BS4
BS5
BS1.1
BS2.1
BS3.1
BS4.1
BS5.1
AS1
AS2
AS3
AS4
RE1
RE2
RE3
RE4
RE5
RE6
RE7
RE8
DM1
DM2
RF1
RF2
RF3
RF4
RM1
RM2
RM3
RM4
RM5
LO1
LO2
LO3
LO4
LO5
LO6
LO7
FD1
FD2
FD3
FD4
FD5
FD6
FD7
FD8
FG1
FG2
FG3
FG4
FG5
FG6
argentina_1
argentina
0.1
0.5
Coleoptera.33
14
NA
k59
Scirtidae sp. 5545
Eukaryota
Animalia
Arthropoda
NA
Insecta
Neoptera
Coleoptera
Polyphaga
Scirtidae
NA
NA
NA
F
aquatic
scraper
macro
prey
0
0
3
3
0
0
0
3
3
0
3
3
0
0
0
0.00
0
3.00
1
0.00
3
0.0
0
3
0.00
0
0.0
3
1
0
3
3
0
1
0
0.0
3
0
1.00
0.00
3.00
3.0
3.00
0.0
0
0.00
0.00
0.00
0.00
2.0
3
0
0.00
0.00
argentina_1
argentina
0.1
0.5
Diptera.276
2
NA
k539
Tipulidae sp. 5552
Eukaryota
Animalia
Arthropoda
NA
Insecta
Neoptera
Diptera
Nematocera
Tipulidae
NA
NA
NA
F
aquatic
shredder
macro
prey
0
3
3
3
0
0
0
0
3
0
3
3
1
0
0
0.00
0
3.00
3
0.00
0
0.0
0
3
0.00
0
0.0
3
1
3
0
3
0
0
0
0.0
0
3
0.00
0.00
1.00
1.0
3.00
0.0
1
0.00
0.00
1.00
1.00
3.0
0
0
0.00
1.00
argentina_1
argentina
0.1
0.5
Diptera.61
7
NA
k188
Chironomidae sp. 5551
Eukaryota
Animalia
Arthropoda
NA
Insecta
Neoptera
Diptera
Nematocera
Chironomidae
NA
NA
NA
F
aquatic
gatherer
macro
prey
0
1
3
0
0
0
0
3
0
0
3
3
3
0
0
0.25
0
2.25
2
0.25
0
0.5
3
1
0.25
0
0.5
0
3
1
0
0
0
0
0
0.5
3
1
0.25
1.75
2.25
2.5
0.75
2.5
0
0.25
0.25
0.75
1.25
0.5
1
2
0.75
0.75
argentina_10
argentina
2.5
1.0
Diptera.250
1
NA
k515
Tabanidae sp. 5576
Eukaryota
Animalia
Arthropoda
NA
Insecta
Neoptera
Diptera
Brachycera
Tabanidae
NA
NA
NA
F
aquatic
piercer
macro
predator
0
0
0
3
3
0
0
0
3
3
1
2
0
0
0
0.00
0
3.00
0
0.00
2
0.0
0
3
0.00
0
1.0
3
0
0
0
3
0
0
1
0.0
3
1
0.00
0.00
0.00
1.0
1.00
0.0
0
0.00
0.00
3.00
1.00
0.0
0
0
3.00
0.00
argentina_10
argentina
2.5
1.0
Diptera.276
2
NA
k539
Tipulidae sp. 5552
Eukaryota
Animalia
Arthropoda
NA
Insecta
Neoptera
Diptera
Nematocera
Tipulidae
NA
NA
NA
F
aquatic
shredder
macro
prey
0
3
3
3
0
0
0
0
3
0
3
3
1
0
0
0.00
0
3.00
3
0.00
0
0.0
0
3
0.00
0
0.0
3
1
3
0
3
0
0
0
0.0
0
3
0.00
0.00
1.00
1.0
3.00
0.0
1
0.00
0.00
1.00
1.00
3.0
0
0
0.00
1.00
argentina_10
argentina
2.5
1.0
Diptera.61
6
NA
k188
Chironomidae sp. 5551
Eukaryota
Animalia
Arthropoda
NA
Insecta
Neoptera
Diptera
Nematocera
Chironomidae
NA
NA
NA
F
aquatic
gatherer
macro
prey
0
1
3
0
0
0
0
3
0
0
3
3
3
0
0
0.25
0
2.25
2
0.25
0
0.5
3
1
0.25
0
0.5
0
3
1
0
0
0
0
0
0.5
3
1
0.25
1.75
2.25
2.5
0.75
2.5
0
0.25
0.25
0.75
1.25
0.5
1
2
0.75
0.75
Now, we need to calculate the total abundance and biomass for every
group defined by site
, site_brom.id
, and either pred_prey
or
func.group
. We can write a function that does this for us, and allows
us to control the groups that will be summed together. Using dplyr
's
non-standard
evaluation
we can define the groups.
REQUEST for feedback: the syntax here is admittedly a bit strange.
Should I just write little convenience functions that perform these
tasks? sum_functional()
and sum_trophic()
for example?
For example, to summarize by functional group:
#4 summarize by functional group
func_groups <- sum_func_groups(invert_traits,
grps = list(~site,
~site_brom.id,
~func.group))
kable(head(func_groups))
site
site_brom.id
func.group
total_abundance
total_biomass
total_taxa
argentina
argentina_1
gatherer
7
NA
1
argentina
argentina_1
scraper
14
NA
1
argentina
argentina_1
shredder
2
NA
1
argentina
argentina_10
gatherer
6
NA
1
argentina
argentina_10
piercer
1
NA
1
argentina
argentina_10
shredder
2
NA
1
This is a convenient format for plotting:
library(ggplot2)
## functional group abundance
func_groups %>%
ggplot(aes(x = as.factor(func.group), y = total_abundance)) +
geom_point(position = position_jitter(width = 0.25), alpha = 0.5) +
stat_summary(fun.data = "mean_cl_boot", colour = "red", size = 0.6) +
facet_wrap(~site, scales = "free_y") +
ggtitle("Functional group abundance")
To summarize by trophic level group, simply switch ~func.group
to
~pred_prey
:
predprey <- sum_func_groups(invert_traits,
grps = list(~site,
~site_brom.id,
~pred_prey))
predprey %>%
ggplot(aes(x = as.factor(pred_prey), y = total_abundance)) +
geom_point(position = position_jitter(width = 0.25), alpha = 0.5) +
stat_summary(fun.data = "mean_cl_boot", colour = "red", size = 0.6) +
facet_wrap(~site, scales = "free_y") +
ggtitle("Trophic level abundance")
under construction right now the only measure I'm working on is derived from the number of consecutive dry days. We can use the metric "longest period of consecutive dry days", and/or quantify their distribution in some other way
We have daily water measurements for some sites, and from these we will
be able to calculate several measures of "hydrological stability".
First, we obtain the leaf.waterdepths
data in the usual way:
leafwater <- c("Argentina", "French_Guiana", "Colombia",
"Macae", "PuertoRico","CostaRica") %>%
combine_tab("leaf.waterdepths")
We also need two other tabs: site.info
and bromeliad.physical
. The
former states the beginning and end of the experiment, and the latter
the block for each bromeliad. These are necessary pieces of information
to calculate the date at which each bromeliad was placed in the field
and removed from the field. We need this information because some groups
did not measure water at the beginning (Costa Rica) or did so
irregularly (Costa Rica, Argentina). Thus we need to fill in missing
days.
sites <- c("Argentina", "French_Guiana", "Colombia",
"Macae", "PuertoRico","CostaRica") %>%
combine_tab("site.info")
phys <- c("Argentina", "French_Guiana", "Colombia",
"Macae", "PuertoRico","CostaRica") %>%
combine_tab("bromeliad.physical")
We can obtain all the hydro variables with one compound function:
hydro_variables()
:
hydro <- hydro_variables(waterdata = leafwater,
sitedata = sites,
physicaldata = phys)
## Removing all NA groups: data is grouped by site, watered_first
## Joining by: c("site", "trt.name")
## Joining by: c("site_brom.id", "site", "trt.name", "leaf", "watered_first", "date")
kable(head(hydro))
site
trt.name
leaf
len.depth
n.depth
max.depth
min.depth
mean.depth
var.depth
sd.depth
net_fluct
total_fluct
cv.depth
amplitude
wetness
prop.overflow.days
prop.driedout.days
time.since.minimum
argentina
mu0.1k0.5
leafa
66
4
64.55
0.00
32.67500
934.6975
30.57282
0
0
93.56641
64.55
0.5061967
0.0151515
0.0151515
NA
argentina
mu0.1k0.5
leafb
66
4
42.75
0.00
15.10000
409.0150
20.22412
0
0
133.93456
42.75
0.3532164
0.0151515
0.0303030
NA
argentina
mu0.1k1
leafa
66
6
55.50
0.00
13.65000
465.8800
21.58425
0
0
158.12640
55.50
0.2459459
0.0151515
0.0454545
NA
argentina
mu0.1k1
leafb
66
6
93.70
18.75
61.08333
735.9147
27.12775
0
0
44.41105
74.95
0.6519032
0.0303030
0.0000000
NA
argentina
mu0.1k2
leafa
66
10
73.50
0.00
27.51000
893.4821
29.89117
0
0
108.65566
73.50
0.3742857
0.0151515
0.0757576
NA
argentina
mu0.1k2
leafb
66
10
56.10
0.00
17.93000
565.3640
23.77738
0
0
132.61229
56.10
0.3196078
0.0151515
0.0909091
NA
This function should "just work". As you can see, it is performing one check (removing any groups which have all NA records) and performs two joins (to correct the errors discussed above).
It seems that the centre leaf is not like the others. Therefore by
default the fucntion removes it. If you want it anyway, set
rm_centre = TRUE
(Note the Canadian spelling).
hydro2 <- hydro_variables(waterdata = leafwater,
sitedata = sites,
physicaldata = phys, rm_centre = FALSE)
## Removing all NA groups: data is grouped by site, watered_first
## Joining by: c("site", "trt.name")
## Joining by: c("site_brom.id", "site", "trt.name", "leaf", "watered_first", "date")
## Removing all NA groups: data is grouped by site_brom.id, site, trt.name, leaf, watered_first, temporal.block
kable(head(hydro2))
site
trt.name
leaf
len.depth
n.depth
max.depth
min.depth
mean.depth
var.depth
sd.depth
net_fluct
total_fluct
cv.depth
amplitude
wetness
prop.overflow.days
prop.driedout.days
time.since.minimum
argentina
mu0.1k0.5
centre
66
4
102.50
70.70
82.33750
209.5990
14.47753
0
0
17.58316
31.80
0.8032927
0.0151515
0.0000000
NA
argentina
mu0.1k0.5
leafa
66
4
64.55
0.00
32.67500
934.6975
30.57282
0
0
93.56641
64.55
0.5061967
0.0151515
0.0151515
NA
argentina
mu0.1k0.5
leafb
66
4
42.75
0.00
15.10000
409.0150
20.22412
0
0
133.93456
42.75
0.3532164
0.0151515
0.0303030
NA
argentina
mu0.1k1
centre
66
6
118.20
87.05
106.38333
121.2147
11.00975
0
0
10.34913
31.15
0.9000282
0.0454545
0.0000000
NA
argentina
mu0.1k1
leafa
66
6
55.50
0.00
13.65000
465.8800
21.58425
0
0
158.12640
55.50
0.2459459
0.0151515
0.0454545
NA
argentina
mu0.1k1
leafb
66
6
93.70
18.75
61.08333
735.9147
27.12775
0
0
44.41105
74.95
0.6519032
0.0303030
0.0000000
NA
The default behaviour is to calculate all these metrics at the level of the leaf well, the same scale at which the measurements were taken. If you want you can obtain these same calculations AFTER first averaging water depths across all leaves of a plant, within each day. That is, we can make these same calculations at the scale of the bromeliad:
hydro3 <- hydro_variables(waterdata = leafwater,
sitedata = sites,
physicaldata = phys, aggregate_leaves = TRUE)
## Removing all NA groups: data is grouped by site, watered_first
## Joining by: c("site", "trt.name")
## Joining by: c("site_brom.id", "site", "trt.name", "watered_first", "date")
kable(head(hydro3))
site
trt.name
len.depth
n.depth
max.depth
min.depth
mean.depth
var.depth
sd.depth
net_fluct
total_fluct
cv.depth
amplitude
wetness
prop.overflow.days
prop.driedout.days
time.since.minimum
argentina
mu0.1k0.5
132
8
53.650
0.000
23.88750
435.7680
20.87506
0.00
0.00
87.38904
53.650
0.4452470
0.0151515
0.0151515
NA
argentina
mu0.1k1
132
12
74.600
9.375
37.36667
433.9820
20.83223
0.00
0.00
55.75085
65.225
0.5008937
0.0151515
0.0000000
NA
argentina
mu0.1k2
132
20
54.575
0.000
22.72000
560.7702
23.68059
0.00
0.00
104.22794
54.575
0.4163078
0.0454545
0.0757576
NA
argentina
mu0.2k0.5
132
8
57.625
0.000
14.40625
711.5658
26.67519
0.00
0.00
185.16402
57.625
0.2500000
0.0151515
0.0454545
NA
argentina
mu0.2k1
132
14
62.150
0.000
27.78236
681.6890
26.10917
0.00
0.00
93.97753
62.150
0.4470210
0.0303030
0.0454545
NA
argentina
mu0.2k2
132
22
65.500
0.000
38.94705
349.9938
18.70812
3.45
3.45
48.03477
65.500
0.5946114
0.0303030
0.0151515
NA
We release the code in this repository under the MIT software license. see text of license here
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.