knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) knitr::opts_knit$set(root.dir = tempdir())
vignette("gc01_gcplyr")
vignette("gc02_import_reshape")
vignette("gc03_incorporate_designs")
vignette("gc04_preprocess_plot")
vignette("gc05_process")
vignette("gc06_analyze")
vignette("gc07_noise")
vignette("gc08_conclusion")
vignette("gc09_multiple_plates")
vignette("gc10_using_make_design")
So far, we've imported and transformed our measures data into R
. Now we're going to address how to incorporate our experimental design.
If you haven't already, load the necessary packages.
library(gcplyr)
We often want to combine our data with information about the experimental design. gcplyr
enables incorporation of design elements in two ways:
R
using make_design
If you're interested in generating your designs in R
, see vignette("gc10_using_make_design")
When reading design elements from files, gcplyr
can read block-shaped or tidy-shaped design files:
import_blockdesigns
read_tidys
To import block-shaped design files, use import_blockdesigns
, which will return a tidy-shaped designs data frame (or list of data frames).
import_blockdesigns
only requires a list of filenames (or relative file paths) and will return a data.frame (or list of data frames) in a tidy format that you can save in R.
Let's look at an example. First, we need to create an example file for the sake of this tutorial (normally you'd create this file in Excel)
make_example(vignette = 3, example = 1, dir = ".")
Now let's take a look at what the file looks like:
print_df(read.csv("mydesign.csv", header = FALSE, colClasses = "character"))
Here we can see that our design has Treatment 1 on the left-hand side of the plate (wells in columns 1 through 6), and Treatment 2 on the right-hand side of the plate (wells in columns 7 through 12). Let's import this design using import_blockdesigns
, saving it with the column name Treatment_numbers
.
my_design <- import_blockdesigns(files = "mydesign.csv", block_names = "Treatment_numbers") head(my_design, 20)
What do you do if you have multiple designs? For instance, what if you have several strains each in several treatments? In that case, you have two options:
Regardless of which option you use, you can then import them all in one go with import_blockdesigns
.
First, let's create both our example designs files. Again, just imagine that you've created these files in Excel.
make_example(vignette = 3, example = 1, dir = ".") make_example(vignette = 3, example = 2, dir = ".")
Now let's take a look at what these files looks like:
print_df(read.csv("mydesign.csv", header = FALSE, colClasses = "character")) print_df(read.csv("mydesign2.csv", header = FALSE, colClasses = "character"))
As before, we have Treatment 1 on the left-hand side, and Treatment 2 on the right-hand side. In addition, we now also have Strain A in the first two rows, Strain B in the next two rows, and so on.
Let's now import both designs using import_blockdesigns
, saving them to columns named Treatment_numbers
and Strain_letters
.
my_design <- import_blockdesigns(files = c("mydesign.csv", "mydesign2.csv"), block_names = c("Treatment_numbers", "Strain_letters")) head(my_design, 20)
If you have your blocks separated but saved in the same file, you simply specify the location of each block within the file:
make_example(vignette = 3, example = 3, dir = ".") #Print what the file looks like print_df(read.csv("mydesign_sep.csv", header = FALSE, colClasses = "character")) #Read in the designs my_design <- import_blockdesigns(files = c("mydesign_sep.csv"), block_names = c("Treatment_numbers", "Strain_letters"), startrow = c(1, 11), endrow = c(9, 19)) head(my_design, 20)
Alternative to saving your designs separated, often it may be easiest to save all the design information into a single block, separating the distinct components of the design with some character.
To demonstrate this, first let's create our example designs file. Again, just imagine that you've created this file in Excel.
make_example(vignette = 3, example = 4, dir = ".")
Now let's take a look at what the file looks like:
print_df(read.csv("mydesign_pasted.csv", header = FALSE, colClasses = "character")[, 1:10])
As before, we have Treatment 1 on the left-hand side, and Treatment 2 on the right-hand side, with Strain A in the first two rows, Strain B in the next two rows, and so on. However, this information is now pasted together, with "_" as the separating string (you can use any string as a separator).
To import this design with import_blockdesigns
, we simply need to specify the sep
string, as well as the output column names. Since the designs have been pasted together, the column names will result from splitting the designs apart. The easiest way to specify these split column names is to use the into
argument passed to separate_tidy
[if into
is not specified, import_blockdesigns
will attempt to split the block_names
(either specified or inferred) with sep
to generate the output column names].
my_design <- import_blockdesigns(files = "mydesign_pasted.csv", into = c("Treatment_numbers", "Strain_letters"), sep = "_") head(my_design, 20)
You can import tidy-shaped designs with read_tidys
.
read_tidys
only requires a filename (or vector of filenames, or relative file paths) and will return a data.frame
(or list of data.frames) that you can save in R.
Once these design elements have been read into the R
environment, they are ready to merge.
Once we have both our design and data in R
and tidy-shaped, we can merge them using merge_dfs
.
To demonstrate this, we'll use the data in the example_widedata_noiseless
dataset that is included with gcplyr
, and which was the source for our previous examples with import_blockmeasures
and read_wides
.
In the example_widedata_noiseless
dataset, we have 48 different bacterial strains. The left side of the plate has all 48 strains in a single well each, and the right side of the plate also has all 48 strains in a single well each:
Row names | Column 1 | ... | Column 6 | Column 7 | ... | Column 12 --------- | -------- | --- | -------- | -------- | --- | -------- Row A | Strain #1 | ... | Strain #6 | Strain #1 | ... | Strain #6 Row B | Strain #7 | ... | Strain #12 | Strain #7 | ... | Strain #12 ... | ... | ... | ... | ... | ... | ... Row G | Strain #37 | ... | Strain #42 | Strain #37 | ... | Strain #42 Row H | Strain #43 | ... | Strain #48 | Strain #43 | ... | Strain #48
Then, on the right hand side of the plate a phage was also inoculated (while the left hand side remained bacteria-only):
Row names |Column 1 | ... | Column 6 | Column 7 | ... | Column 12 --------- |-------- | --- | -------- | -------- | --- | -------- Row A |No Phage | ... | No Phage | Phage Added | ... | Phage Added Row B |No Phage | ... | No Phage | Phage Added | ... | Phage Added ... |... | ... | ... | ... | ... | ... Row G |No Phage | ... | No Phage | Phage Added | ... | Phage Added Row H |No Phage | ... | No Phage | Phage Added | ... | Phage Added
Let's transform the example_widedata_noiseless
to tidy-shaped.
example_tidydata <- trans_wide_to_tidy(example_widedata_noiseless, id_cols = "Time")
gcplyr
also includes the design for this data for easy use:
example_design <- example_design_tidy head(example_design_tidy)
Now that we have our data and designs tidy-shaped, we merge the two using merge_dfs
, saving the result to ex_dat_mrg
, short for example_data_merged. merge_dfs
merges using columns with the same name between the two data.frames.
ex_dat_mrg <- merge_dfs(example_tidydata, example_design) head(ex_dat_mrg)
Now that you've merged your data and designs, you can pre-process and plot your data
vignette("gc01_gcplyr")
vignette("gc02_import_reshape")
vignette("gc03_incorporate_designs")
vignette("gc04_preprocess_plot")
vignette("gc05_process")
vignette("gc06_analyze")
vignette("gc07_noise")
vignette("gc08_conclusion")
vignette("gc09_multiple_plates")
vignette("gc10_using_make_design")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.