From 964d6bcee8581877d8105b7577cdc752367d9ac8 Mon Sep 17 00:00:00 2001 From: njlyon0 Date: Fri, 3 May 2024 12:13:16 -0400 Subject: [PATCH] Integrated Angel's feedback on the data wrangling module. Thanks Angel! --- _freeze/mod_wrangle/execute-results/html.json | 5 +-- .../mod_wrangle/figure-html/custom-fxns-1.png | Bin 39203 -> 39253 bytes .../figure-html/custom-fxns-improved-1.png | Bin 41012 -> 41047 bytes .../mod_wrangle/figure-html/multi-hist-1.png | Bin 41491 -> 41552 bytes mod_wrangle.qmd | 29 ++++++++++++------ 5 files changed, 22 insertions(+), 12 deletions(-) diff --git a/_freeze/mod_wrangle/execute-results/html.json b/_freeze/mod_wrangle/execute-results/html.json index 983181c..acba5fc 100644 --- a/_freeze/mod_wrangle/execute-results/html.json +++ b/_freeze/mod_wrangle/execute-results/html.json @@ -1,7 +1,8 @@ { - "hash": "360f45021765194da9df61b897edf47b", + "hash": "ce521408cb06f58266d57c72db8f4a2b", "result": { - "markdown": "---\ntitle: \"Data Harmonization & Wrangling\"\ncode-annotations: hover\n---\n\n\n## Overview\n\nNow that we have covered how to find data and use data visualization methods to explore it, we can move on to combining separate data files and preparing that combined data file for analysis. For the purposes of this module we're adopting a very narrow view of harmonization and a very broad view of wrangling but this distinction aligns well with two discrete philosophical/practical arenas. To make those definitions explicit:\n\n- \"Harmonization\" = process of combining separate primary data objects into one object. This includes things like synonymizing columns, or changing data format to support combination. This _excludes_ quality control steps--even those that are undertaken before harmonization begins.\n\n- \"Wrangling\" = all modifications to data meant to create an analysis-ready 'tidy' data object. This includes quality control, unit conversions, and data 'shape' changes to name a few. Note that attaching ancillary data to your primary data object (e.g., attaching temperature data to a dataset on plant species composition) _also falls into this category!_\n\n## Learning Objectives\n\nAfter completing this module you will be able to: \n\n- Identify typical steps in data harmonization and wrangling workflows\n- Create a harmonization workflow\n- Define quality control\n- Summarize typical operations in a quality control workflow\n- Use regular expressions to perform flexible text operations\n- Write custom functions to reduce code duplication\n- Identify value of and typical obstacles to data 'joining'\n- Explain benefits and drawbacks of using data shape to streamline code\n- Design a complete data wrangling workflow\n\n## Needed Packages\n\nIf you'd like to follow along with the code chunks included throughout this module, you'll need to install the following packages:\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Note that these lines only need to be run once per computer\n## So you can skip this step if you've installed these before\ninstall.packages(\"ltertools\")\ninstall.packages(\"lterdatasampler\")\ninstall.packages(\"psych\")\ninstall.packages(\"supportR\")\ninstall.packages(\"tidyverse\")\n```\n:::\n\n\nWe'll load the Tidyverse meta-package here to have access to many of its useful tools when we need them later.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Load tidyverse\nlibrary(tidyverse)\n```\n:::\n\n\n## Harmonizing Data\n\nData harmonization is an interesting topic in that it is _vital_ for synthesis projects but only very rarely relevant for primary research. Synthesis projects must reckon with the data choices made by each team of original data collectors. These collectors may or may not have recorded their judgement calls (or indeed, any metadata) but before synthesis work can be meaningfully done these independent datasets must be made comparable to one another and combined.\n\nFor tabular data, we recommend using the [`ltertools` R package](https://lter.github.io/ltertools/) to perform any needed harmonization. This package relies on a \"column key\" to translate the original column names into equivalents that apply across all datasets. Users can generate this column key however they would like but Google Sheets is a strong option as it allows multiple synthesis team members to simultaneously work on filling in the needed bits of the key.\n\nThe column key requires three columns:\n\n1. \"source\" -- Name of the raw file\n2. \"raw_name\" -- Name of all raw columns in that file to be synonymized\n3. \"tidy_name\" -- New name for each raw column that should be carried to the harmonized data\n\nNote that any raw names either not included in the column key or that lack a tidy name equivalent will be excluded from the final data object. For more information, consult the `ltertools` [package vignette](https://lter.github.io/ltertools/articles/ltertools.html). For convenience, we're attaching the visual diagram of this method of harmonization from the package vignette.\n\n

\n\"Four\n

\n\n## Wrangling Data\n\nData wrangling is a _huge_ subject that covers a wide range of topics. In this part of the module, we'll attempt to touch on a wide range of tools that may prove valuable to your data wrangling efforts. This is certainly non-exhaustive and you'll likely find new tools that fit your coding style and professional intuition better. However, hopefully the topics covered below provide a nice 'jumping off' point to reproducibly prepare your data for analysis and visualization work later in the lifecycle of the project.\n\nThis module will use example data to demonstrate these tools but as we work through these topics you should feel free to substitute a dataset of your choosing! If you don't have one in mind, you can use the example dataset shown in the code chunks throughout this module.\n\nThis dataset comes from the [`lterdatasampler` R package](https://lter.github.io/lterdatasampler/) and the data are about fiddler crabs (_Minuca pugnax_) at the [Plum Island Ecosystems (PIE) LTER](https://pie-lter.ecosystems.mbl.edu/welcome-plum-island-ecosystems-lter) site.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Load the lterdatasampler package\nlibrary(lterdatasampler)\n\n# Load the fiddler crab dataset\ndata(pie_crab)\n```\n:::\n\n\n### Exploring the Data\n\nBefore beginning any code operations, it's important to get a sense for the data. Characteristics like the dimensions of the dataset, the column names, and the type of information stored in each column are all crucial pre-requisites to knowing what tools can or should be used on the data.\n\nChecking the data structure is one way of getting a lot of this high-level information.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Check dataset structure\nstr(pie_crab)\n```\n\n::: {.cell-output .cell-output-stdout}\n```\ntibble [392 × 9] (S3: tbl_df/tbl/data.frame)\n $ date : Date[1:392], format: \"2016-07-24\" \"2016-07-24\" ...\n $ latitude : num [1:392] 30 30 30 30 30 30 30 30 30 30 ...\n $ site : chr [1:392] \"GTM\" \"GTM\" \"GTM\" \"GTM\" ...\n $ size : num [1:392] 12.4 14.2 14.5 12.9 12.4 ...\n $ air_temp : num [1:392] 21.8 21.8 21.8 21.8 21.8 ...\n $ air_temp_sd : num [1:392] 6.39 6.39 6.39 6.39 6.39 ...\n $ water_temp : num [1:392] 24.5 24.5 24.5 24.5 24.5 ...\n $ water_temp_sd: num [1:392] 6.12 6.12 6.12 6.12 6.12 ...\n $ name : chr [1:392] \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" ...\n```\n:::\n:::\n\n\nFor data that are primarily numeric, you may find data summary functions to be valuable. Note that most functions of this type do not provide useful information on text columns so you'll need to find that information elsewhere.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Get a simple summary of the data\nsummary(pie_crab)\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n date latitude site size \n Min. :2016-07-24 Min. :30.00 Length:392 Min. : 6.64 \n 1st Qu.:2016-07-28 1st Qu.:34.00 Class :character 1st Qu.:12.02 \n Median :2016-08-01 Median :39.10 Mode :character Median :14.44 \n Mean :2016-08-02 Mean :37.69 Mean :14.66 \n 3rd Qu.:2016-08-09 3rd Qu.:41.60 3rd Qu.:17.34 \n Max. :2016-08-13 Max. :42.70 Max. :23.43 \n air_temp air_temp_sd water_temp water_temp_sd \n Min. :10.29 Min. :6.391 Min. :13.98 Min. :4.838 \n 1st Qu.:12.05 1st Qu.:8.110 1st Qu.:14.33 1st Qu.:6.567 \n Median :13.93 Median :8.410 Median :17.50 Median :6.998 \n Mean :15.20 Mean :8.654 Mean :17.65 Mean :7.252 \n 3rd Qu.:18.63 3rd Qu.:9.483 3rd Qu.:20.54 3rd Qu.:7.865 \n Max. :21.79 Max. :9.965 Max. :24.50 Max. :9.121 \n name \n Length:392 \n Class :character \n Mode :character \n \n \n \n```\n:::\n:::\n\n\nFor text columns it can sometimes be useful to simply look at the unique entries in a given column and sort them alphabetically for ease of parsing.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Look at the sites included in the data\nsort(unique(pie_crab$site))\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n [1] \"BC\" \"CC\" \"CT\" \"DB\" \"GTM\" \"JC\" \"NB\" \"NIB\" \"PIE\" \"RC\" \"SI\" \"VCR\"\n[13] \"ZI\" \n```\n:::\n:::\n\n\nFor those of you who think more visually, a histogram can be a nice way of examining numeric data. There are simple histogram functions in the 'base' packages of most programming languages but it can sometimes be worth it to use those from special libraries because they can often convey additional detail.\n\n\n::: {.cell layout-align=\"center\"}\n\n```{.r .cell-code}\n# Load the psych library\nlibrary(psych)\n\n# Get the histogram of crab \"size\" (carapace width in mm)\npsych::multi.hist(pie_crab$size)\n```\n\n::: {.cell-output-display}\n![](mod_wrangle_files/figure-html/multi-hist-1.png){fig-align='center' width=384}\n:::\n:::\n\n\n:::{.callout-warning icon=\"false\"}\n#### Discussion: Data Exploration Tools\n\nWith a group of 4-5 others discuss the following questions:\n\n- What tools do you use when exploring new data?\n- Do you already use any of these tools to explore your data?\n - If you do, why do you use them?\n - If not, where do you think they might be valuable to include?\n- What value--if any--do you see in including these exploratory efforts in your code workflow?\n\n:::\n\n### Quality Control\n\nYou may have encountered the phrase \"QA/QC\" (Quality Assurance / Quality Control) in relation to data cleaning. Technically, quality assurance only encapsulates _preventative_ measures for reducing errors. One example of QA would be using a template for field datasheets because using standard fields reduces the risk that data are recorded inconsistently and/or incompletely. Quality control on the other hand refers to all steps taken to resolve errors _after_ data are collected. Any code that you write to fix typos or remove outliers from a dataset falls under the umbrella of QC.\n\nIn synthesis work, QA is only very rarely an option. You'll be working with datasets that have already been collected and attempting to handle any issues _post hoc_ which means the vast majority of data wrangling operations will be quality control methods. These QC efforts can be **incredibly** time-consuming so using a programming language (like {{< fa brands r-project >}} R or {{< fa brands python >}} Python) is a dramatic improvement over manually looking through the data using Microsoft Excel or other programs like it.\n\n#### Number Checking\n\nWhen you read in a dataset and a column that _should be_ numeric is instead read in as a character, it can be a sign that there are malformed numbers lurking in the background. Checking for and resolving these non-numbers is preferable to simply coercing the column into being numeric because the latter method typically changes those values to 'NA' where a human might be able to deduce the true number each value 'should be.'\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Load the supportR package\nlibrary(supportR)\n\n# Create an example dataset with non-numbers in ideally numeric columns\nfish_ct <- data.frame(\"species\" = c(\"salmon\", \"bass\", \"halibut\", \"moray eel\"),\n \"count\" = c(12, \"14x\", \"_23\", 1))\n\n# Check for malformed numbers in column(s) that should be numeric\nbad_nums <- supportR::num_check(data = fish_ct, col = \"count\")\n```\n\n::: {.cell-output .cell-output-stderr}\n```\nFor 'count', 2 non-numbers identified: '14x' | '_23'\n```\n:::\n:::\n\n\nIn the above example, \"14x\" would be coerced to NA if you simply force the column without checking but you could drop the \"x\" with text replacing methods once you use tools like this one to flag it for your attention.\n\n#### Text Replacement\n\nOne of the simpler ways of handling text issues is just to replace a string with another string. Most programming languages support this functionality.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Use pattern match/replace to simplify problem entries\nfish_ct$count <- gsub(pattern = \"x|_\", replacement = \"\", x = fish_ct$count)\n\n# Check that they are fixed\nbad_nums <- supportR::num_check(data = fish_ct, col = \"count\")\n```\n\n::: {.cell-output .cell-output-stderr}\n```\nFor 'count', no non-numeric values identified.\n```\n:::\n:::\n\n\nThe vertical line in the `gsub` example above lets us search for (and replace) multiple patterns. Note however that while you can search for many patterns at once, only a single replacement value can be provided with this function.\n\n#### Regular Expressions\n\nYou may sometimes want to perform more generic string matching where you don't necessarily know--or want to list--all possible strings to find and replace. For instance, you may want remove any letter in a numeric column or find and replace numbers with some sort of text note. \"Regular expressions\" are how programmers specify these generic matches and using them can be a nice way of streamlining code.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Make a test vector\nregex_vec <- c(\"hello\", \"123\", \"goodbye\", \"456\")\n\n# Find all numbers and replace with the letter X\ngsub(pattern = \"[[:digit:]]\", replacement = \"x\", x = regex_vec)\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] \"hello\" \"xxx\" \"goodbye\" \"xxx\" \n```\n:::\n\n```{.r .cell-code}\n# Replace any number of letters with only a single 0\ngsub(pattern = \"[[:alpha:]]+\", replacement = \"0\", x = regex_vec)\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] \"0\" \"123\" \"0\" \"456\"\n```\n:::\n:::\n\n\n### Conditionals\n\nRather than finding and replacing content, you may want to create a new column based on the contents of a different column. In plain language you might phrase this as 'if column X has \\[some values\\] then column Y should have \\[other values\\]'. These operations are called conditionals and are an important part of data wrangling.\n\nIf you only want your conditional to support two outcomes (as in an either/or statement) there are useful functions that support this. Let's return to our Plum Island Ecosystems crab dataset for an example.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Make a new colum with an either/or conditional\npie_crab_v2 <- pie_crab %>% \n dplyr::mutate(size_category = ifelse(test = (size >= 15), # <1>\n yes = \"big\",\n no = \"small\"),\n .after = size) \n\n# Count the number of crabs in each category\npie_crab_v2 %>% \n dplyr::group_by(size_category) %>% \n dplyr::summarize(crab_ct = dplyr::n())\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n# A tibble: 2 × 2\n size_category crab_ct\n \n1 big 179\n2 small 213\n```\n:::\n:::\n\n1. `mutate` makes a new column, `ifelse` is actually doing the conditional\n\nIf you have multiple different conditions you _can_ just stack these either/or conditionals together but this gets cumbersome quickly. It is preferable to instead use a function that supports as many alternates as you want!\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Make a new column with several conditionals\npie_crab_v2 <- pie_crab %>% \n dplyr::mutate(size_category = dplyr::case_when( \n size <= 10 ~ \"tiny\", # <1>\n size > 10 & size <= 15 ~ \"small\",\n size > 15 & size <= 20 ~ \"big\",\n size > 20 ~ \"huge\",\n TRUE ~ \"uncategorized\"), # <2>\n .after = size)\n\n# Count the number of crabs in each category\npie_crab_v2 %>% \n dplyr::group_by(size_category) %>% \n dplyr::summarize(crab_ct = dplyr::n())\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n# A tibble: 4 × 2\n size_category crab_ct\n \n1 big 150\n2 huge 28\n3 small 178\n4 tiny 36\n```\n:::\n:::\n\n1. Syntax is 'test ~ what to do when true'\n2. This line is a catch-all for any rows that _don't_ meet previous conditions\n\nNote that you can use functions like this one when you do have an either/or conditional if you prefer this format.\n\n:::{.callout-note icon=\"false\"}\n#### Activity: Conditionals\n\nIn a script, attempt the following with the PIE crab data:\n\n- Create a column indicating when air temperature is above or below 13° Fahrenheit\n- Create a column indicating whether water temperature is lower than the first quartile, between the first quartile and the median water temp, between the median and the third quartile or greater than the third quartile\n - _Hint:_ consult the `summary` function output!\n\n:::\n\n\n### Uniting / Separating Columns\n\nSometimes one column has multiple pieces of information that you'd like to consider separately. A date column is a common example of this because particular months are always in a given season regardless of the specific day or year. So, it can be useful to break a complete date (i.e., year/month/day) into its component bits to be better able to access those pieces of information.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Split date into each piece of temporal info\npie_crab_v3 <- pie_crab_v2 %>% \n tidyr::separate_wider_delim(cols = date, \n delim = \"-\", # <1>\n names = c(\"year\", \"month\", \"day\"),\n cols_remove = TRUE) # <2>\n\n# Check that out\nstr(pie_crab_v3)\n```\n\n::: {.cell-output .cell-output-stdout}\n```\ntibble [392 × 12] (S3: tbl_df/tbl/data.frame)\n $ year : chr [1:392] \"2016\" \"2016\" \"2016\" \"2016\" ...\n $ month : chr [1:392] \"07\" \"07\" \"07\" \"07\" ...\n $ day : chr [1:392] \"24\" \"24\" \"24\" \"24\" ...\n $ latitude : num [1:392] 30 30 30 30 30 30 30 30 30 30 ...\n $ site : chr [1:392] \"GTM\" \"GTM\" \"GTM\" \"GTM\" ...\n $ size : num [1:392] 12.4 14.2 14.5 12.9 12.4 ...\n $ size_category: chr [1:392] \"small\" \"small\" \"small\" \"small\" ...\n $ air_temp : num [1:392] 21.8 21.8 21.8 21.8 21.8 ...\n $ air_temp_sd : num [1:392] 6.39 6.39 6.39 6.39 6.39 ...\n $ water_temp : num [1:392] 24.5 24.5 24.5 24.5 24.5 ...\n $ water_temp_sd: num [1:392] 6.12 6.12 6.12 6.12 6.12 ...\n $ name : chr [1:392] \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" ...\n```\n:::\n:::\n\n1. 'delim' is short for \"delimiter\" which we covered in the Reproducibility module\n2. This argument specifies whether to remove the original column when making the new columns\n\nWhile breaking apart a column's contents can be useful, it can also be helpful to combine the contents of several columns!\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Re-combine data information back into date\npie_crab_v4 <- pie_crab_v3 %>% \n tidyr::unite(col = \"date\",\n sep = \"/\", # <1>\n year:day, \n remove = FALSE) # <2>\n\n# Structure check\nstr(pie_crab_v4)\n```\n\n::: {.cell-output .cell-output-stdout}\n```\ntibble [392 × 13] (S3: tbl_df/tbl/data.frame)\n $ date : chr [1:392] \"2016/07/24\" \"2016/07/24\" \"2016/07/24\" \"2016/07/24\" ...\n $ year : chr [1:392] \"2016\" \"2016\" \"2016\" \"2016\" ...\n $ month : chr [1:392] \"07\" \"07\" \"07\" \"07\" ...\n $ day : chr [1:392] \"24\" \"24\" \"24\" \"24\" ...\n $ latitude : num [1:392] 30 30 30 30 30 30 30 30 30 30 ...\n $ site : chr [1:392] \"GTM\" \"GTM\" \"GTM\" \"GTM\" ...\n $ size : num [1:392] 12.4 14.2 14.5 12.9 12.4 ...\n $ size_category: chr [1:392] \"small\" \"small\" \"small\" \"small\" ...\n $ air_temp : num [1:392] 21.8 21.8 21.8 21.8 21.8 ...\n $ air_temp_sd : num [1:392] 6.39 6.39 6.39 6.39 6.39 ...\n $ water_temp : num [1:392] 24.5 24.5 24.5 24.5 24.5 ...\n $ water_temp_sd: num [1:392] 6.12 6.12 6.12 6.12 6.12 ...\n $ name : chr [1:392] \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" ...\n```\n:::\n:::\n\n1. This is equivalent to the 'delim' argument in the previous function\n2. Comparable to the 'cols_remove' argument in the previous function\n\nNote in this output how despite re-combining data information the column is listed as a character column! Simply combining or separating data is not always enough so you need to really lean into frequent data structure checks to be sure that your data are structured in the way that you want.\n\n### Joining Data\n\nOften the early steps of a synthesis project involve combine the data tables horizontally. You might imagine that you have two groups' data on sea star abundance and--once you've synonymized the column names--you can simply 'stack' the tables on top of one another. Slightly trickier but no less common is combining tables by the contents of a shared column (or columns). Cases like this include wanting to combine your sea star table with ocean temperature data from the region of each group's research. You can't simply attach the columns because that assumes that the row order is identical between the two data tables (and indeed, that there are the same number of rows in both to begin with!). In this case, if both data tables shared some columns (perhaps \"site\" and coordinate columns) you can use **joins** to let your computer match these key columns and make sure that only appropriate rows are combined.\n\nBecause joins are completely dependent upon the value in both columns being an _exact_ match, it is a good idea to carefully check the contents of those columns before attempting a join to make sure that the join will be successful.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Create a fish taxonomy dataframe that corresponds with the earlier fish dataframe\nfish_tax <- data.frame(\"species\" = c(\"salmon\", \"bass\", \"halibut\", \"eel\"),\n \"family\" = c(\"Salmonidae\", \"Serranidae\", \"Pleuronectidae\", \"Muraenidae\"))\n\n# Check to make sure that the 'species' column matches between both tables\nsupportR::diff_check(old = fish_ct$species, new = fish_tax$species) \n```\n\n::: {.cell-output .cell-output-stderr}\n```\nFollowing element(s) found in old object but not new: \n```\n:::\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] \"moray eel\"\n```\n:::\n\n::: {.cell-output .cell-output-stderr}\n```\nFollowing element(s) found in new object but not old: \n```\n:::\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] \"eel\"\n```\n:::\n\n```{.r .cell-code}\n# Use text replacement methods to fix that mistake in one table\nfish_tax_v2 <- fish_tax %>% \n dplyr::mutate(species = gsub(pattern = \"^eel$\", replacement = \"moray eel\", x = species))\n\n# Re-check to make sure that fixed it\nsupportR::diff_check(old = fish_ct$species, new = fish_tax_v2$species)\n```\n\n::: {.cell-output .cell-output-stderr}\n```\nAll elements of old object found in new\n```\n:::\n\n::: {.cell-output .cell-output-stderr}\n```\nAll elements of new object found in old\n```\n:::\n:::\n\n\nNow that the shared column matches between the two two dataframes we can use a join to combine them! There are four types of join:\n\n1. left/right join\n2. full join (a.k.a. outer join)\n3. inner join\n4. anti join\n\nYou can learn more about the types of join [here](https://nceas.github.io/scicomp-workshop-tidyverse/join.html) or [here](https://njlyon0.github.io/teach_r-for-biologists/materials/slides_4a.html#/title-slide) but the quick explanation is that the name of the join indicates whether the rows of the \"left\" and/or the \"right\" table are retained in the combined table. In synthesis work a left join or full join is most common (where you have your primary data in the left position and some ancillary/supplementary dataset in the right position).\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Let's combine the fish count and fish taxonomy information\nfish_df <- fish_ct %>% \n # Actual join step\n dplyr::left_join(y = fish_tax_v2, by = \"species\") %>% # <1>\n # Move 'family' column to the left of all other columns\n dplyr::relocate(family, .before = dplyr::everything())\n\n# Look at the result of that\nfish_df\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n family species count\n1 Salmonidae salmon 12\n2 Serranidae bass 14\n3 Pleuronectidae halibut 23\n4 Muraenidae moray eel 1\n```\n:::\n:::\n\n1. The 'by' argument accepts a vector of column names found in both data tables\n\n:::{.callout-note icon=\"false\"}\n#### Activity: Separating Columns & Joining Data\n\nIn a script, attempt the following with the PIE crab data:\n\n1. Create a data frame where you bin months into seasons (i.e., winter, spring, summer, fall)\n - Use your judgement on which month(s) should fall into each given PIE's latitude/location\n2. Join your season table to the PIE crab data based on month\n - _Hint:_ you may need to modify the PIE dataset to ensure both data tables share at least one column upon which they can be joined\n3. Calculate the average size of crabs in each season in order to identify which season correlates with the largest crabs\n\n:::\n\n### Leveraging Data Shape\n\nYou may already be familiar with data shape but fewer people recognize how playing with the shape of data can make certain operations _dramatically_ more efficient. If you haven't encountered it before, any data table can be said to have one of two 'shapes': either **long** or **wide**. Wide data have all measured variables from a single observation in one row (typically resulting in more columns than rows or \"wider\" data tables). Long data usually have one observation split into many rows (typically resulting in more rows than columns or \"longer\" data tables).\n\nData shape is often important for statistical analysis or visualization but it has an under-appreciated role to play in quality control efforts as well. If many columns have the shared criteria for what constitutes \"tidy\", you can reshape the data to get all of those values into a single column (i.e., reshape longer), perform any needed wrangling, then--when you're finished--reshape back into the original data shape (i.e., reshape wider). As opposed to applying the same operations repeatedly to each column individually.\n\nLet's consider an example to help clarify this. We'll simulate a butterfly dataset where both the number of different species and their sex were recorded in the same column. This makes the column not technically numeric and therefore unusable in analysis or visualization.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Generate a butterfly dataframe\nbfly_v1 <- data.frame(\"pasture\" = c(\"PNW\", \"PNW\", \"RCS\", \"RCS\"),\n \"monarch\" = c(\"14m\", \"10f\", \"7m\", \"16f\"),\n \"melissa_blue\" = c(\"32m\", \"2f\", \"6m\", \"0f\"),\n \"swallowtail\" = c(\"1m\", \"3f\", \"0m\", \"5f\"))\n\n# First we'll reshape this into long format\nbfly_v2 <- bfly_v1 %>% \n tidyr::pivot_longer(cols = -pasture, \n names_to = \"butterfly_sp\", \n values_to = \"count_sex\")\n\n# Check what that leaves us with\nhead(bfly_v2, n = 4)\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n# A tibble: 4 × 3\n pasture butterfly_sp count_sex\n \n1 PNW monarch 14m \n2 PNW melissa_blue 32m \n3 PNW swallowtail 1m \n4 PNW monarch 10f \n```\n:::\n\n```{.r .cell-code}\n# Let's separate count from sex to be more usable later\nbfly_v3 <- bfly_v2 %>% \n tidyr::separate_wider_regex(cols = count_sex, \n c(count = \"[[:digit:]]+\", sex = \"[[:alpha:]]\")) %>% \n # Make the 'count' column a real number now\n dplyr::mutate(count = as.numeric(count))\n\n# Re-check output\nhead(bfly_v3, n = 4)\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n# A tibble: 4 × 4\n pasture butterfly_sp count sex \n \n1 PNW monarch 14 m \n2 PNW melissa_blue 32 m \n3 PNW swallowtail 1 m \n4 PNW monarch 10 f \n```\n:::\n\n```{.r .cell-code}\n# Reshape back into wide-ish format\nbfly_v4 <- bfly_v3 %>% \n tidyr::pivot_wider(names_from = \"butterfly_sp\", values_from = count)\n\n# Re-re-check output\nhead(bfly_v4)\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n# A tibble: 4 × 5\n pasture sex monarch melissa_blue swallowtail\n \n1 PNW m 14 32 1\n2 PNW f 10 2 3\n3 RCS m 7 6 0\n4 RCS f 16 0 5\n```\n:::\n:::\n\n\nWhile we absolutely _could_ have used the same function to break apart count and butterfly sex data it would have involved copy/pasting the same information repeatedly. By pivoting to long format first, we can greatly streamline our code. This can also be advantageous for unit conversions, applying data transformations, or checking text column contents among many other possible applications.\n\n### Loops\n\nAnother way of simplfying repetitive operations is to use a \"for loop\" (often called simply \"loops\"). Loops allow you to iterate across a piece of code for a set number of times. Loops require you to define an \"index\" object that will change itself at the end of each iteration of the loop before beginning the next iteration. This index object's identity will be determined by whatever set of values you define at the top of the loop.\n\nHere's a very bare bones example to demonstrate the fundamentals.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Loop across each number between 2 and 4\nfor(k in 2:4){ # <1>\n \n # Square the number\n result <- k^2\n \n # Message that outside of the loop\n message(k, \" squared is \", result)\n} # <2>\n```\n\n::: {.cell-output .cell-output-stderr}\n```\n2 squared is 4\n```\n:::\n\n::: {.cell-output .cell-output-stderr}\n```\n3 squared is 9\n```\n:::\n\n::: {.cell-output .cell-output-stderr}\n```\n4 squared is 16\n```\n:::\n:::\n\n1. 'k' is our index object in this loop\n2. Note that the operations to iterate across are wrapped in curly braces (`{...}`)\n\nOnce you get the hang of loops, they can be a nice way of simplifying your code in a relatively human-readable way! Let's return to our Plum Island Ecosystems crab dataset for a more nuanced example.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Create an empty list\ncrab_list <- list()\n\n# Let's loop across size categories of crab\nfor(focal_size in unique(pie_crab_v4$size_category)){ # <1>\n \n # Subset the data to just this size category\n focal_df <- pie_crab_v4 %>% \n dplyr::filter(size_category == focal_size)\n \n # Calculate average and standard deviation of size within this category\n size_avg <- mean(focal_df$size, na.rm = T) \n size_dev <- sd(focal_df$size, na.rm = T) \n \n # Assemble this into a data table and add to our list\n crab_list[[focal_size]] <- data.frame(\"size_category\" = focal_size,\n \"size_mean\" = size_avg,\n \"size_sd\" = size_dev)\n} # Close loop\n\n# Unlist the outputs into a dataframe\ncrab_df <- purrr::list_rbind(x = crab_list)\n\n# Check out the resulting data table\ncrab_df\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n size_category size_mean size_sd\n1 small 12.624270 1.3827471\n2 tiny 8.876944 0.9112686\n3 big 17.238267 1.3650173\n4 huge 21.196786 0.8276744\n```\n:::\n:::\n\n1. Note that this is not the most efficient way of doing group-wise summarization but is--hopefully--a nice demonstration of loops!\n\n### Custom Functions\n\nFinally, writing your own, customized functions can be really useful particularly when doing synthesis work. Custom functions are generally useful for reducing duplication and increasing ease of maintenance (see the note on custom functions in the SSECR [Reproducibility module](https://lter.github.io/ssecr/mod_reproducibility.html#consider-custom-functions)) and also can be useful end products of synthesis work in and of themselves. \n\nIf one of your group's outputs is a new standard data format or analytical workflow, the functions that you develop to aid yourself become valuable to anyone who adopts your synthesis project's findings into their own workflows. If you get enough functions you can even release a package that others can install and use on their own computers. Such packages are a valuable product of synthesis efforts and can be a nice addition to a robust scientific resume/CV.\n\n\n::: {.cell layout-align=\"center\"}\n\n```{.r .cell-code}\n# Define custom function\ncrab_hist <- function(df, size_cat){\n \n # Subset data to the desired category\n data_sub <- dplyr::filter(.data = df, size_category == size_cat)\n \n # Create a histogram\n p <- psych::multi.hist(x = data_sub$size)\n}\n\n# Invoke function\ncrab_hist(df = pie_crab_v4, size_cat = \"tiny\")\n```\n\n::: {.cell-output-display}\n![](mod_wrangle_files/figure-html/custom-fxns-1.png){fig-align='center' width=384}\n:::\n:::\n\n\nWhen writing your own functions is can also be useful to program defensively. This involves anticipating likely errors and writing your own error messages that are more informative to the user than whatever machine-generated error would otherwise get generated\n\n\n::: {.cell layout-align=\"center\"}\n\n```{.r .cell-code}\n# Define custom function\ncrab_hist <- function(df, size_cat = \"small\"){ # <1>\n \n # Error out if 'df' isn't the right format\n if(is.data.frame(df) != TRUE) # <2>\n stop(\"'df' must be provided as a data frame\")\n \n # Error out if the data doesn't have the right columns\n if(all(c(\"size_category\", \"size\") %in% names(df)) != TRUE)\n stop(\"'df' must include a 'size' and 'size_category' column\")\n \n # Error out for unsupported size category values\n if(size_cat %in% unique(df$size_category) != TRUE)\n stop(\"Specified 'size_cat' not found in provided data\")\n \n # Subset data to the desired category\n data_sub <- dplyr::filter(.data = df, size_category == size_cat)\n \n # Create a histogram\n p <- psych::multi.hist(x = data_sub$size)\n}\n\n# Invoke new-and-improved function\ncrab_hist(df = pie_crab_v4) # <3>\n```\n\n::: {.cell-output-display}\n![](mod_wrangle_files/figure-html/custom-fxns-improved-1.png){fig-align='center' width=384}\n:::\n:::\n\n1. The default category is now set to \"small\"\n2. I recommend phrasing your error checks like this (i.e., 'if \\ is _not_ true, then \\)\n3. We don't need to specify the 'size_cat' argument because we can rely on the default\n\n:::{.callout-note icon=\"false\"}\n#### Activity: Custom Functions\n\nIn a script, attempt the following on the PIE crab data:\n\n- Write a function that:\n - (A) calculates the median of the user-supplied column\n - (B) determines whether each value is above, equal to, or below the median\n - (C) makes a column indicating the results of step B\n- Use the function on the _standard deviation_ of water temperature\n- Use it again on the standard deviation of air temperature\n- Revisit your function and identify 2-3 likely errors\n- Write custom checks (and error messages) for the set of likely issues you just identified\n\n:::\n\n## Additional Resources\n\n### Papers & Documents\n\n- [The Ultimate Guide to Data Cleaning](https://towardsdatascience.com/the-ultimate-guide-to-data-cleaning-3969843991d4). Elgarby, O. 2019. **Medium**\n- [Some Simple Guidelines for Effective Data Management](https://esajournals.onlinelibrary.wiley.com/doi/full/10.1890/0012-9623-90.2.205). Borer _et al._, 2009. **Ecological Society of America Bulletin**\n\n### Workshops & Courses\n\n- Data Analysis and Visualization in R for Ecologists, [Episode 4: Manipulating, Analyzing, and Exporting Data with `tidyverse`](https://datacarpentry.org/R-ecology-lesson/03-dplyr.html). The Carpentries\n- [Coding in the Tidyverse](https://nceas.github.io/scicomp-workshop-tidyverse/). NCEAS Scientific Computing Team, 2023.\n- NCEAS Learning Hub's coreR Course, [Chapter 8: Cleaning & Wrangling Data](https://learning.nceas.ucsb.edu/2023-10-coreR/session_08.html). NCEAS Learning Hub, 2023.\n- NCEAS Learning Hub's coreR Course, [Chapter 16: Writing Functions & Packages](https://learning.nceas.ucsb.edu/2023-10-coreR/session_16.html). NCEAS Learning Hub, 2023.\n- Open Science Synthesis for the Delta Science Program's [Data Munging / QA / QC / Cleaning](https://nceas.github.io/oss-lessons/data-munging-qa-qc-cleaning/data-munging-qa-qc-cleaning.html)\n\n### Websites\n\n- [Ten Commandments for Good Data Management](https://dynamicecology.wordpress.com/2016/08/22/ten-commandments-for-good-data-management/)\n", + "engine": "knitr", + "markdown": "---\ntitle: \"Data Harmonization & Wrangling\"\ncode-annotations: hover\n---\n\n\n## Overview\n\nNow that we have covered how to find data and use data visualization methods to explore it, we can move on to combining separate data files and preparing that combined data file for analysis. For the purposes of this module we're adopting a very narrow view of harmonization and a very broad view of wrangling but this distinction aligns well with two discrete philosophical/practical arenas. To make those definitions explicit:\n\n- \"Harmonization\" = process of combining separate primary data objects into one object. This includes things like synonymizing columns, or changing data format to support combination. This _excludes_ quality control steps--even those that are undertaken before harmonization begins.\n\n- \"Wrangling\" = all modifications to data meant to create an analysis-ready 'tidy' data object. This includes quality control, unit conversions, and data 'shape' changes to name a few. Note that attaching ancillary data to your primary data object (e.g., attaching temperature data to a dataset on plant species composition) _also falls into this category!_\n\n## Learning Objectives\n\nAfter completing this module you will be able to: \n\n- Identify typical steps in data harmonization and wrangling workflows\n- Create a harmonization workflow\n- Define quality control\n- Summarize typical operations in a quality control workflow\n- Use regular expressions to perform flexible text operations\n- Write custom functions to reduce code duplication\n- Identify value of and typical obstacles to data 'joining'\n- Explain benefits and drawbacks of using data shape to streamline code\n- Design a complete data wrangling workflow\n\n## Needed Packages\n\nIf you'd like to follow along with the code chunks included throughout this module, you'll need to install the following packages:\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Note that these lines only need to be run once per computer\n## So you can skip this step if you've installed these before\ninstall.packages(\"ltertools\")\ninstall.packages(\"lterdatasampler\")\ninstall.packages(\"psych\")\ninstall.packages(\"supportR\")\ninstall.packages(\"tidyverse\")\n```\n:::\n\n\nWe'll load the Tidyverse meta-package here to have access to many of its useful tools when we need them later.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Load tidyverse\nlibrary(tidyverse)\n```\n:::\n\n\n## Harmonizing Data\n\nData harmonization is an interesting topic in that it is _vital_ for synthesis projects but only very rarely relevant for primary research. Synthesis projects must reckon with the data choices made by each team of original data collectors. These collectors may or may not have recorded their judgement calls (or indeed, any metadata) but before synthesis work can be meaningfully done these independent datasets must be made comparable to one another and combined.\n\nFor tabular data, we recommend using the [`ltertools` R package](https://lter.github.io/ltertools/) to perform any needed harmonization. This package relies on a \"column key\" to translate the original column names into equivalents that apply across all datasets. Users can generate this column key however they would like but Google Sheets is a strong option as it allows multiple synthesis team members to simultaneously work on filling in the needed bits of the key. If you already have a set of files locally, `ltertools` does offer a `begin_key` function that creates the first two required columns in the column key.\n\nThe column key requires three columns:\n\n1. \"source\" -- Name of the raw file\n2. \"raw_name\" -- Name of all raw columns in that file to be synonymized\n3. \"tidy_name\" -- New name for each raw column that should be carried to the harmonized data\n\nNote that any raw names either not included in the column key or that lack a tidy name equivalent will be excluded from the final data object. For more information, consult the `ltertools` [package vignette](https://lter.github.io/ltertools/articles/ltertools.html). For convenience, we're attaching the visual diagram of this method of harmonization from the package vignette.\n\n

\n\"Four\n

\n\n## Wrangling Data\n\nData wrangling is a _huge_ subject that covers a wide range of topics. In this part of the module, we'll attempt to touch on a wide range of tools that may prove valuable to your data wrangling efforts. This is certainly non-exhaustive and you'll likely find new tools that fit your coding style and professional intuition better. However, hopefully the topics covered below provide a nice 'jumping off' point to reproducibly prepare your data for analysis and visualization work later in the lifecycle of the project.\n\nThis module will use example data to demonstrate these tools but as we work through these topics you should feel free to substitute a dataset of your choosing! If you don't have one in mind, you can use the example dataset shown in the code chunks throughout this module.\n\nThis dataset comes from the [`lterdatasampler` R package](https://lter.github.io/lterdatasampler/) and the data are about fiddler crabs (_Minuca pugnax_) at the [Plum Island Ecosystems (PIE) LTER](https://pie-lter.ecosystems.mbl.edu/welcome-plum-island-ecosystems-lter) site.\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Load the lterdatasampler package\nlibrary(lterdatasampler)\n\n# Load the fiddler crab dataset\ndata(pie_crab)\n```\n:::\n\n\n### Exploring the Data\n\nBefore beginning any code operations, it's important to get a sense for the data. Characteristics like the dimensions of the dataset, the column names, and the type of information stored in each column are all crucial pre-requisites to knowing what tools can or should be used on the data.\n\nChecking the data structure is one way of getting a lot of this high-level information.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Check dataset structure\nstr(pie_crab)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\ntibble [392 × 9] (S3: tbl_df/tbl/data.frame)\n $ date : Date[1:392], format: \"2016-07-24\" \"2016-07-24\" ...\n $ latitude : num [1:392] 30 30 30 30 30 30 30 30 30 30 ...\n $ site : chr [1:392] \"GTM\" \"GTM\" \"GTM\" \"GTM\" ...\n $ size : num [1:392] 12.4 14.2 14.5 12.9 12.4 ...\n $ air_temp : num [1:392] 21.8 21.8 21.8 21.8 21.8 ...\n $ air_temp_sd : num [1:392] 6.39 6.39 6.39 6.39 6.39 ...\n $ water_temp : num [1:392] 24.5 24.5 24.5 24.5 24.5 ...\n $ water_temp_sd: num [1:392] 6.12 6.12 6.12 6.12 6.12 ...\n $ name : chr [1:392] \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" ...\n```\n\n\n:::\n:::\n\n\nFor data that are primarily numeric, you may find data summary functions to be valuable. Note that most functions of this type do not provide useful information on text columns so you'll need to find that information elsewhere.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Get a simple summary of the data\nsummary(pie_crab)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n date latitude site size \n Min. :2016-07-24 Min. :30.00 Length:392 Min. : 6.64 \n 1st Qu.:2016-07-28 1st Qu.:34.00 Class :character 1st Qu.:12.02 \n Median :2016-08-01 Median :39.10 Mode :character Median :14.44 \n Mean :2016-08-02 Mean :37.69 Mean :14.66 \n 3rd Qu.:2016-08-09 3rd Qu.:41.60 3rd Qu.:17.34 \n Max. :2016-08-13 Max. :42.70 Max. :23.43 \n air_temp air_temp_sd water_temp water_temp_sd \n Min. :10.29 Min. :6.391 Min. :13.98 Min. :4.838 \n 1st Qu.:12.05 1st Qu.:8.110 1st Qu.:14.33 1st Qu.:6.567 \n Median :13.93 Median :8.410 Median :17.50 Median :6.998 \n Mean :15.20 Mean :8.654 Mean :17.65 Mean :7.252 \n 3rd Qu.:18.63 3rd Qu.:9.483 3rd Qu.:20.54 3rd Qu.:7.865 \n Max. :21.79 Max. :9.965 Max. :24.50 Max. :9.121 \n name \n Length:392 \n Class :character \n Mode :character \n \n \n \n```\n\n\n:::\n:::\n\n\nFor text columns it can sometimes be useful to simply look at the unique entries in a given column and sort them alphabetically for ease of parsing.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Look at the sites included in the data\nsort(unique(pie_crab$site))\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n [1] \"BC\" \"CC\" \"CT\" \"DB\" \"GTM\" \"JC\" \"NB\" \"NIB\" \"PIE\" \"RC\" \"SI\" \"VCR\"\n[13] \"ZI\" \n```\n\n\n:::\n:::\n\n\nFor those of you who think more visually, a histogram can be a nice way of examining numeric data. There are simple histogram functions in the 'base' packages of most programming languages but it can sometimes be worth it to use those from special libraries because they can often convey additional detail.\n\n\n::: {.cell layout-align=\"center\"}\n\n```{.r .cell-code}\n# Load the psych library\nlibrary(psych)\n\n# Get the histogram of crab \"size\" (carapace width in mm)\npsych::multi.hist(pie_crab$size)\n```\n\n::: {.cell-output-display}\n![](mod_wrangle_files/figure-html/multi-hist-1.png){fig-align='center' width=384}\n:::\n:::\n\n\n:::{.callout-warning icon=\"false\"}\n#### Discussion: Data Exploration Tools\n\nWith a group of 4-5 others discuss the following questions:\n\n- What tools do you use when exploring new data?\n- Do you already use any of these tools to explore your data?\n - If you do, why do you use them?\n - If not, where do you think they might be valuable to include?\n- What value--if any--do you see in including these exploratory efforts in your code workflow?\n\n:::\n\n### Quality Control\n\nYou may have encountered the phrase \"QA/QC\" (Quality Assurance / Quality Control) in relation to data cleaning. Technically, quality assurance only encapsulates _preventative_ measures for reducing errors. One example of QA would be using a template for field datasheets because using standard fields reduces the risk that data are recorded inconsistently and/or incompletely. Quality control on the other hand refers to all steps taken to resolve errors _after_ data are collected. Any code that you write to fix typos or remove outliers from a dataset falls under the umbrella of QC.\n\nIn synthesis work, QA is only very rarely an option. You'll be working with datasets that have already been collected and attempting to handle any issues _post hoc_ which means the vast majority of data wrangling operations will be quality control methods. These QC efforts can be **incredibly** time-consuming so using a programming language (like {{< fa brands r-project >}} R or {{< fa brands python >}} Python) is a dramatic improvement over manually looking through the data using Microsoft Excel or other programs like it.\n\n#### Number Checking\n\nWhen you read in a dataset and a column that _should be_ numeric is instead read in as a character, it can be a sign that there are malformed numbers lurking in the background. Checking for and resolving these non-numbers is preferable to simply coercing the column into being numeric because the latter method typically changes those values to 'NA' where a human might be able to deduce the true number each value 'should be.'\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Load the supportR package\nlibrary(supportR)\n\n# Create an example dataset with non-numbers in ideally numeric columns\nfish_ct <- data.frame(\"species\" = c(\"salmon\", \"bass\", \"halibut\", \"moray eel\"),\n \"count\" = c(12, \"14x\", \"_23\", 1))\n\n# Check for malformed numbers in column(s) that should be numeric\nbad_nums <- supportR::num_check(data = fish_ct, col = \"count\")\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nFor 'count', 2 non-numbers identified: '14x' | '_23'\n```\n\n\n:::\n:::\n\n\nIn the above example, \"14x\" would be coerced to NA if you simply force the column without checking but you could drop the \"x\" with text replacing methods once you use tools like this one to flag it for your attention.\n\n#### Text Replacement\n\nOne of the simpler ways of handling text issues is just to replace a string with another string. Most programming languages support this functionality.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Use pattern match/replace to simplify problem entries\nfish_ct$count <- gsub(pattern = \"x|_\", replacement = \"\", x = fish_ct$count)\n\n# Check that they are fixed\nbad_nums <- supportR::num_check(data = fish_ct, col = \"count\")\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nFor 'count', no non-numeric values identified.\n```\n\n\n:::\n:::\n\n\nThe vertical line in the `gsub` example above lets us search for (and replace) multiple patterns. Note however that while you can search for many patterns at once, only a single replacement value can be provided with this function.\n\n#### Regular Expressions\n\nYou may sometimes want to perform more generic string matching where you don't necessarily know--or want to list--all possible strings to find and replace. For instance, you may want remove any letter in a numeric column or find and replace numbers with some sort of text note. \"Regular expressions\" are how programmers specify these generic matches and using them can be a nice way of streamlining code.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Make a test vector\nregex_vec <- c(\"hello\", \"123\", \"goodbye\", \"456\")\n\n# Find all numbers and replace with the letter X\ngsub(pattern = \"[[:digit:]]\", replacement = \"x\", x = regex_vec)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] \"hello\" \"xxx\" \"goodbye\" \"xxx\" \n```\n\n\n:::\n\n```{.r .cell-code}\n# Replace any number of letters with only a single 0\ngsub(pattern = \"[[:alpha:]]+\", replacement = \"0\", x = regex_vec)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] \"0\" \"123\" \"0\" \"456\"\n```\n\n\n:::\n:::\n\n\nThe [`stringr` package cheatsheet](https://github.com/rstudio/cheatsheets/blob/afaa1fec4c5b9aabfa886218b6ba20317446d378/strings.pdf) has a really nice list of regular expression options that you may find valuable if you want to delve deeper on this topic. Scroll to the second page of the PDF to see the most relevant parts.\n\n### Conditionals\n\nRather than finding and replacing content, you may want to create a new column based on the contents of a different column. In plain language you might phrase this as 'if column X has \\[some values\\] then column Y should have \\[other values\\]'. These operations are called conditionals and are an important part of data wrangling.\n\nIf you only want your conditional to support two outcomes (as in an either/or statement) there are useful functions that support this. Let's return to our Plum Island Ecosystems crab dataset for an example.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Make a new colum with an either/or conditional\npie_crab_v2 <- pie_crab %>% \n dplyr::mutate(size_category = ifelse(test = (size >= 15), # <1>\n yes = \"big\",\n no = \"small\"),\n .after = size) \n\n# Count the number of crabs in each category\npie_crab_v2 %>% \n dplyr::group_by(size_category) %>% \n dplyr::summarize(crab_ct = dplyr::n())\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 2 × 2\n size_category crab_ct\n \n1 big 179\n2 small 213\n```\n\n\n:::\n:::\n\n1. `mutate` makes a new column, `ifelse` is actually doing the conditional\n\nIf you have multiple different conditions you _can_ just stack these either/or conditionals together but this gets cumbersome quickly. It is preferable to instead use a function that supports as many alternates as you want!\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Make a new column with several conditionals\npie_crab_v2 <- pie_crab %>% \n dplyr::mutate(size_category = dplyr::case_when( \n size <= 10 ~ \"tiny\", # <1>\n size > 10 & size <= 15 ~ \"small\",\n size > 15 & size <= 20 ~ \"big\",\n size > 20 ~ \"huge\",\n TRUE ~ \"uncategorized\"), # <2>\n .after = size)\n\n# Count the number of crabs in each category\npie_crab_v2 %>% \n dplyr::group_by(size_category) %>% \n dplyr::summarize(crab_ct = dplyr::n())\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 4 × 2\n size_category crab_ct\n \n1 big 150\n2 huge 28\n3 small 178\n4 tiny 36\n```\n\n\n:::\n:::\n\n1. Syntax is 'test ~ what to do when true'\n2. This line is a catch-all for any rows that _don't_ meet previous conditions\n\nNote that you can use functions like this one when you do have an either/or conditional if you prefer this format.\n\n:::{.callout-note icon=\"false\"}\n#### Activity: Conditionals\n\nIn a script, attempt the following with the PIE crab data:\n\n- Create a column indicating when air temperature is above or below 13° Fahrenheit\n- Create a column indicating whether water temperature is lower than the first quartile, between the first quartile and the median water temp, between the median and the third quartile or greater than the third quartile\n - _Hint:_ consult the `summary` function output!\n\n:::\n\n\n### Uniting / Separating Columns\n\nSometimes one column has multiple pieces of information that you'd like to consider separately. A date column is a common example of this because particular months are always in a given season regardless of the specific day or year. So, it can be useful to break a complete date (i.e., year/month/day) into its component bits to be better able to access those pieces of information.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Split date into each piece of temporal info\npie_crab_v3 <- pie_crab_v2 %>% \n tidyr::separate_wider_delim(cols = date, \n delim = \"-\", # <1>\n names = c(\"year\", \"month\", \"day\"),\n cols_remove = TRUE) # <2>\n\n# Check that out\nstr(pie_crab_v3)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\ntibble [392 × 12] (S3: tbl_df/tbl/data.frame)\n $ year : chr [1:392] \"2016\" \"2016\" \"2016\" \"2016\" ...\n $ month : chr [1:392] \"07\" \"07\" \"07\" \"07\" ...\n $ day : chr [1:392] \"24\" \"24\" \"24\" \"24\" ...\n $ latitude : num [1:392] 30 30 30 30 30 30 30 30 30 30 ...\n $ site : chr [1:392] \"GTM\" \"GTM\" \"GTM\" \"GTM\" ...\n $ size : num [1:392] 12.4 14.2 14.5 12.9 12.4 ...\n $ size_category: chr [1:392] \"small\" \"small\" \"small\" \"small\" ...\n $ air_temp : num [1:392] 21.8 21.8 21.8 21.8 21.8 ...\n $ air_temp_sd : num [1:392] 6.39 6.39 6.39 6.39 6.39 ...\n $ water_temp : num [1:392] 24.5 24.5 24.5 24.5 24.5 ...\n $ water_temp_sd: num [1:392] 6.12 6.12 6.12 6.12 6.12 ...\n $ name : chr [1:392] \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" ...\n```\n\n\n:::\n:::\n\n1. 'delim' is short for \"delimiter\" which we covered in the Reproducibility module\n2. This argument specifies whether to remove the original column when making the new columns\n\nWhile breaking apart a column's contents can be useful, it can also be helpful to combine the contents of several columns!\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Re-combine data information back into date\npie_crab_v4 <- pie_crab_v3 %>% \n tidyr::unite(col = \"date\",\n sep = \"/\", # <1>\n year:day, \n remove = FALSE) # <2>\n\n# Structure check\nstr(pie_crab_v4)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\ntibble [392 × 13] (S3: tbl_df/tbl/data.frame)\n $ date : chr [1:392] \"2016/07/24\" \"2016/07/24\" \"2016/07/24\" \"2016/07/24\" ...\n $ year : chr [1:392] \"2016\" \"2016\" \"2016\" \"2016\" ...\n $ month : chr [1:392] \"07\" \"07\" \"07\" \"07\" ...\n $ day : chr [1:392] \"24\" \"24\" \"24\" \"24\" ...\n $ latitude : num [1:392] 30 30 30 30 30 30 30 30 30 30 ...\n $ site : chr [1:392] \"GTM\" \"GTM\" \"GTM\" \"GTM\" ...\n $ size : num [1:392] 12.4 14.2 14.5 12.9 12.4 ...\n $ size_category: chr [1:392] \"small\" \"small\" \"small\" \"small\" ...\n $ air_temp : num [1:392] 21.8 21.8 21.8 21.8 21.8 ...\n $ air_temp_sd : num [1:392] 6.39 6.39 6.39 6.39 6.39 ...\n $ water_temp : num [1:392] 24.5 24.5 24.5 24.5 24.5 ...\n $ water_temp_sd: num [1:392] 6.12 6.12 6.12 6.12 6.12 ...\n $ name : chr [1:392] \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" \"Guana Tolomoto Matanzas NERR\" ...\n```\n\n\n:::\n:::\n\n1. This is equivalent to the 'delim' argument in the previous function\n2. Comparable to the 'cols_remove' argument in the previous function\n\nNote in this output how despite re-combining data information the column is listed as a character column! Simply combining or separating data is not always enough so you need to really lean into frequent data structure checks to be sure that your data are structured in the way that you want.\n\n### Joining Data\n\nOften the early steps of a synthesis project involve combining the data tables horizontally. You might imagine that you have two groups' data on sea star abundance and--once you've synonymized the column names--you can simply 'stack' the tables on top of one another. Slightly trickier but no less common is combining tables by the contents of a shared column (or columns). Cases like this include wanting to combine your sea star table with ocean temperature data from the region of each group's research. You can't simply attach the columns because that assumes that the row order is identical between the two data tables (and indeed, that there are the same number of rows in both to begin with!). In this case, if both data tables shared some columns (perhaps \"site\" and coordinate columns) you can use **joins** to let your computer match these key columns and make sure that only appropriate rows are combined.\n\nBecause joins are completely dependent upon the value in both columns being an _exact_ match, it is a good idea to carefully check the contents of those columns before attempting a join to make sure that the join will be successful.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Create a fish taxonomy dataframe that corresponds with the earlier fish dataframe\nfish_tax <- data.frame(\"species\" = c(\"salmon\", \"bass\", \"halibut\", \"eel\"),\n \"family\" = c(\"Salmonidae\", \"Serranidae\", \"Pleuronectidae\", \"Muraenidae\"))\n\n# Check to make sure that the 'species' column matches between both tables\nsupportR::diff_check(old = fish_ct$species, new = fish_tax$species) \n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nFollowing element(s) found in old object but not new: \n```\n\n\n:::\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] \"moray eel\"\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\nFollowing element(s) found in new object but not old: \n```\n\n\n:::\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] \"eel\"\n```\n\n\n:::\n:::\n\n::: {.cell}\n\n```{.r .cell-code}\n# Use text replacement methods to fix that mistake in one table\nfish_tax_v2 <- fish_tax %>% \n dplyr::mutate(species = gsub(pattern = \"^eel$\", # <1>\n replacement = \"moray eel\", \n x = species))\n\n# Re-check to make sure that fixed it\nsupportR::diff_check(old = fish_ct$species, new = fish_tax_v2$species)\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nAll elements of old object found in new\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\nAll elements of new object found in old\n```\n\n\n:::\n:::\n\n1. The symbols around \"eel\" mean that we're only finding/replacing _exact_ matches. It doesn't matter in this context but often replacing a partial match would result in more problems. For example, replacing \"eel\" with \"moray eel\" could make \"electric eel\" into \"electric moray eel\".\n\nNow that the shared column matches between the two two dataframes we can use a join to combine them! There are four types of join:\n\n1. left/right join\n2. full join (a.k.a. outer join)\n3. inner join\n4. anti join\n\nYou can learn more about the types of join [here](https://nceas.github.io/scicomp-workshop-tidyverse/join.html) or [here](https://njlyon0.github.io/teach_r-for-biologists/materials/slides_4a.html#/title-slide) but the quick explanation is that the name of the join indicates whether the rows of the \"left\" and/or the \"right\" table are retained in the combined table. In synthesis work a left join or full join is most common (where you have your primary data in the left position and some ancillary/supplementary dataset in the right position).\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Let's combine the fish count and fish taxonomy information\nfish_df <- fish_ct %>% \n # Actual join step\n dplyr::left_join(y = fish_tax_v2, by = \"species\") %>% # <1>\n # Move 'family' column to the left of all other columns\n dplyr::relocate(family, .before = dplyr::everything())\n\n# Look at the result of that\nfish_df\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n family species count\n1 Salmonidae salmon 12\n2 Serranidae bass 14\n3 Pleuronectidae halibut 23\n4 Muraenidae moray eel 1\n```\n\n\n:::\n:::\n\n1. The 'by' argument accepts a vector of column names found in both data tables\n\n:::{.callout-note icon=\"false\"}\n#### Activity: Separating Columns & Joining Data\n\nIn a script, attempt the following with the PIE crab data:\n\n1. Create a data frame where you bin months into seasons (i.e., winter, spring, summer, fall)\n - Use your judgement on which month(s) should fall into each given PIE's latitude/location\n2. Join your season table to the PIE crab data based on month\n - _Hint:_ you may need to modify the PIE dataset to ensure both data tables share at least one column upon which they can be joined\n3. Calculate the average size of crabs in each season in order to identify which season correlates with the largest crabs\n\n:::\n\n### Leveraging Data Shape\n\nYou may already be familiar with data shape but fewer people recognize how playing with the shape of data can make certain operations _dramatically_ more efficient. If you haven't encountered it before, any data table can be said to have one of two 'shapes': either **long** or **wide**. Wide data have all measured variables from a single observation in one row (typically resulting in more columns than rows or \"wider\" data tables). Long data usually have one observation split into many rows (typically resulting in more rows than columns or \"longer\" data tables).\n\nData shape is often important for statistical analysis or visualization but it has an under-appreciated role to play in quality control efforts as well. If many columns have the shared criteria for what constitutes \"tidy\", you can reshape the data to get all of those values into a single column (i.e., reshape longer), perform any needed wrangling, then--when you're finished--reshape back into the original data shape (i.e., reshape wider). As opposed to applying the same operations repeatedly to each column individually.\n\nLet's consider an example to help clarify this. We'll simulate a butterfly dataset where both the number of different species and their sex were recorded in the same column. This makes the column not technically numeric and therefore unusable in analysis or visualization.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Generate a butterfly dataframe\nbfly_v1 <- data.frame(\"pasture\" = c(\"PNW\", \"PNW\", \"RCS\", \"RCS\"),\n \"monarch\" = c(\"14m\", \"10f\", \"7m\", \"16f\"),\n \"melissa_blue\" = c(\"32m\", \"2f\", \"6m\", \"0f\"),\n \"swallowtail\" = c(\"1m\", \"3f\", \"0m\", \"5f\"))\n\n# First we'll reshape this into long format\nbfly_v2 <- bfly_v1 %>% \n tidyr::pivot_longer(cols = -pasture, \n names_to = \"butterfly_sp\", \n values_to = \"count_sex\")\n\n# Check what that leaves us with\nhead(bfly_v2, n = 4)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 4 × 3\n pasture butterfly_sp count_sex\n \n1 PNW monarch 14m \n2 PNW melissa_blue 32m \n3 PNW swallowtail 1m \n4 PNW monarch 10f \n```\n\n\n:::\n\n```{.r .cell-code}\n# Let's separate count from sex to be more usable later\nbfly_v3 <- bfly_v2 %>% \n tidyr::separate_wider_regex(cols = count_sex, \n c(count = \"[[:digit:]]+\", sex = \"[[:alpha:]]\")) %>% \n # Make the 'count' column a real number now\n dplyr::mutate(count = as.numeric(count))\n\n# Re-check output\nhead(bfly_v3, n = 4)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 4 × 4\n pasture butterfly_sp count sex \n \n1 PNW monarch 14 m \n2 PNW melissa_blue 32 m \n3 PNW swallowtail 1 m \n4 PNW monarch 10 f \n```\n\n\n:::\n\n```{.r .cell-code}\n# Reshape back into wide-ish format\nbfly_v4 <- bfly_v3 %>% \n tidyr::pivot_wider(names_from = \"butterfly_sp\", values_from = count)\n\n# Re-re-check output\nhead(bfly_v4)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 4 × 5\n pasture sex monarch melissa_blue swallowtail\n \n1 PNW m 14 32 1\n2 PNW f 10 2 3\n3 RCS m 7 6 0\n4 RCS f 16 0 5\n```\n\n\n:::\n:::\n\n\nWhile we absolutely _could_ have used the same function to break apart count and butterfly sex data it would have involved copy/pasting the same information repeatedly. By pivoting to long format first, we can greatly streamline our code. This can also be advantageous for unit conversions, applying data transformations, or checking text column contents among many other possible applications.\n\n### Loops\n\nAnother way of simplfying repetitive operations is to use a \"for loop\" (often called simply \"loops\"). Loops allow you to iterate across a piece of code for a set number of times. Loops require you to define an \"index\" object that will change itself at the end of each iteration of the loop before beginning the next iteration. This index object's identity will be determined by whatever set of values you define at the top of the loop.\n\nHere's a very bare bones example to demonstrate the fundamentals.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Loop across each number between 2 and 4\nfor(k in 2:4){ # <1>\n \n # Square the number\n result <- k^2\n \n # Message that outside of the loop\n message(k, \" squared is \", result)\n} # <2>\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\n2 squared is 4\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\n3 squared is 9\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stderr}\n\n```\n4 squared is 16\n```\n\n\n:::\n:::\n\n1. 'k' is our index object in this loop\n2. Note that the operations to iterate across are wrapped in curly braces (`{...}`)\n\nOnce you get the hang of loops, they can be a nice way of simplifying your code in a relatively human-readable way! Let's return to our Plum Island Ecosystems crab dataset for a more nuanced example.\n\n\n::: {.cell}\n\n```{.r .cell-code}\n# Create an empty list\ncrab_list <- list()\n\n# Let's loop across size categories of crab\nfor(focal_size in unique(pie_crab_v4$size_category)){ # <1>\n \n # Subset the data to just this size category\n focal_df <- pie_crab_v4 %>% \n dplyr::filter(size_category == focal_size)\n \n # Calculate average and standard deviation of size within this category\n size_avg <- mean(focal_df$size, na.rm = T) \n size_dev <- sd(focal_df$size, na.rm = T) \n \n # Assemble this into a data table and add to our list\n crab_list[[focal_size]] <- data.frame(\"size_category\" = focal_size,\n \"size_mean\" = size_avg,\n \"size_sd\" = size_dev)\n} # Close loop\n\n# Unlist the outputs into a dataframe\ncrab_df <- purrr::list_rbind(x = crab_list) # <2>\n\n# Check out the resulting data table\ncrab_df\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n size_category size_mean size_sd\n1 small 12.624270 1.3827471\n2 tiny 8.876944 0.9112686\n3 big 17.238267 1.3650173\n4 huge 21.196786 0.8276744\n```\n\n\n:::\n:::\n\n1. Note that this is not the most efficient way of doing group-wise summarization but is--hopefully--a nice demonstration of loops!\n2. When all elements of your list have the same column names, `list_rbind` efficiently stacks those elements into one longer data table.\n\n### Custom Functions\n\nFinally, writing your own, customized functions can be really useful particularly when doing synthesis work. Custom functions are generally useful for reducing duplication and increasing ease of maintenance (see the note on custom functions in the SSECR [Reproducibility module](https://lter.github.io/ssecr/mod_reproducibility.html#consider-custom-functions)) and also can be useful end products of synthesis work in and of themselves. \n\nIf one of your group's outputs is a new standard data format or analytical workflow, the functions that you develop to aid yourself become valuable to anyone who adopts your synthesis project's findings into their own workflows. If you get enough functions you can even release a package that others can install and use on their own computers. Such packages are a valuable product of synthesis efforts and can be a nice addition to a robust scientific resume/CV.\n\n\n::: {.cell layout-align=\"center\"}\n\n```{.r .cell-code}\n# Define custom function\ncrab_hist <- function(df, size_cat){\n \n # Subset data to the desired category\n data_sub <- dplyr::filter(.data = df, size_category == size_cat)\n \n # Create a histogram\n p <- psych::multi.hist(x = data_sub$size)\n}\n\n# Invoke function\ncrab_hist(df = pie_crab_v4, size_cat = \"tiny\")\n```\n\n::: {.cell-output-display}\n![](mod_wrangle_files/figure-html/custom-fxns-1.png){fig-align='center' width=384}\n:::\n:::\n\n\nWhen writing your own functions it can also be useful to program defensively. This involves anticipating likely errors and writing your own error messages that are more informative to the user than whatever machine-generated error would otherwise get generated\n\n\n::: {.cell layout-align=\"center\"}\n\n```{.r .cell-code}\n# Define custom function\ncrab_hist <- function(df, size_cat = \"small\"){ # <1>\n \n # Error out if 'df' isn't the right format\n if(is.data.frame(df) != TRUE) # <2>\n stop(\"'df' must be provided as a data frame\")\n \n # Error out if the data doesn't have the right columns\n if(all(c(\"size_category\", \"size\") %in% names(df)) != TRUE) # <3>\n stop(\"'df' must include a 'size' and 'size_category' column\")\n \n # Error out for unsupported size category values\n if(size_cat %in% unique(df$size_category) != TRUE)\n stop(\"Specified 'size_cat' not found in provided data\")\n \n # Subset data to the desired category\n data_sub <- dplyr::filter(.data = df, size_category == size_cat)\n \n # Create a histogram\n p <- psych::multi.hist(x = data_sub$size)\n}\n\n# Invoke new-and-improved function\ncrab_hist(df = pie_crab_v4) # <4>\n```\n\n::: {.cell-output-display}\n![](mod_wrangle_files/figure-html/custom-fxns-improved-1.png){fig-align='center' width=384}\n:::\n:::\n\n1. The default category is now set to \"small\"\n2. We recommend phrasing your error checks with this format (i.e., 'if \\ is _not_ true, then \\)\n3. The `%in%` operator lets you check whether one value matches any element of a set of accepted values. Very useful in contexts like this because the alternative would be a lot of separate \"or\" conditionals\n4. We don't need to specify the 'size_cat' argument because we can rely on the default\n\n:::{.callout-note icon=\"false\"}\n#### Activity: Custom Functions\n\nIn a script, attempt the following on the PIE crab data:\n\n- Write a function that:\n - (A) calculates the median of the user-supplied column\n - (B) determines whether each value is above, equal to, or below the median\n - (C) makes a column indicating the results of step B\n- Use the function on the _standard deviation_ of water temperature\n- Use it again on the standard deviation of air temperature\n- Revisit your function and identify 2-3 likely errors\n- Write custom checks (and error messages) for the set of likely issues you just identified\n\n:::\n\n## Additional Resources\n\n### Papers & Documents\n\n- [The Ultimate Guide to Data Cleaning](https://towardsdatascience.com/the-ultimate-guide-to-data-cleaning-3969843991d4). Elgarby, O. 2019. **Medium**\n- [Some Simple Guidelines for Effective Data Management](https://esajournals.onlinelibrary.wiley.com/doi/full/10.1890/0012-9623-90.2.205). Borer _et al._, 2009. **Ecological Society of America Bulletin**\n\n### Workshops & Courses\n\n- Data Analysis and Visualization in R for Ecologists, [Episode 4: Manipulating, Analyzing, and Exporting Data with `tidyverse`](https://datacarpentry.org/R-ecology-lesson/03-dplyr.html). The Carpentries\n- [Coding in the Tidyverse](https://nceas.github.io/scicomp-workshop-tidyverse/). NCEAS Scientific Computing Team, 2023.\n- NCEAS Learning Hub's coreR Course, [Chapter 8: Cleaning & Wrangling Data](https://learning.nceas.ucsb.edu/2023-10-coreR/session_08.html). NCEAS Learning Hub, 2023.\n- NCEAS Learning Hub's coreR Course, [Chapter 16: Writing Functions & Packages](https://learning.nceas.ucsb.edu/2023-10-coreR/session_16.html). NCEAS Learning Hub, 2023.\n- Open Science Synthesis for the Delta Science Program's [Data Munging / QA / QC / Cleaning](https://nceas.github.io/oss-lessons/data-munging-qa-qc-cleaning/data-munging-qa-qc-cleaning.html)\n\n### Websites\n\n- [Ten Commandments for Good Data Management](https://dynamicecology.wordpress.com/2016/08/22/ten-commandments-for-good-data-management/)\n", "supporting": [ "mod_wrangle_files" ], diff --git a/_freeze/mod_wrangle/figure-html/custom-fxns-1.png b/_freeze/mod_wrangle/figure-html/custom-fxns-1.png index 0f1aabfdcd33bd39015328bcfdb0602b32eda9b6..db84b7b8af1af9d278463811c72fcea909f6e894 100644 GIT binary patch literal 39253 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 literal 39203 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 literal 41012 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 diff --git a/_freeze/mod_wrangle/figure-html/multi-hist-1.png b/_freeze/mod_wrangle/figure-html/multi-hist-1.png index eab0c0e45a89094ac4461ffb30e557f362d74a57..498334f4009c37903ba1f081542db693d2060e5c 100644 GIT binary patch literal 41552 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

gs!-_s&_#FHs5}?o7m}J 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

U?B3GOh5Y$KCzDh?L;w&yTGW4a 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 literal 41491 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 diff --git a/mod_wrangle.qmd b/mod_wrangle.qmd index f760ec0..05e2ff0 100644 --- a/mod_wrangle.qmd +++ b/mod_wrangle.qmd @@ -54,7 +54,7 @@ library(tidyverse) Data harmonization is an interesting topic in that it is _vital_ for synthesis projects but only very rarely relevant for primary research. Synthesis projects must reckon with the data choices made by each team of original data collectors. These collectors may or may not have recorded their judgement calls (or indeed, any metadata) but before synthesis work can be meaningfully done these independent datasets must be made comparable to one another and combined. -For tabular data, we recommend using the [`ltertools` R package](https://lter.github.io/ltertools/) to perform any needed harmonization. This package relies on a "column key" to translate the original column names into equivalents that apply across all datasets. Users can generate this column key however they would like but Google Sheets is a strong option as it allows multiple synthesis team members to simultaneously work on filling in the needed bits of the key. +For tabular data, we recommend using the [`ltertools` R package](https://lter.github.io/ltertools/) to perform any needed harmonization. This package relies on a "column key" to translate the original column names into equivalents that apply across all datasets. Users can generate this column key however they would like but Google Sheets is a strong option as it allows multiple synthesis team members to simultaneously work on filling in the needed bits of the key. If you already have a set of files locally, `ltertools` does offer a `begin_key` function that creates the first two required columns in the column key. The column key requires three columns: @@ -194,6 +194,8 @@ gsub(pattern = "[[:digit:]]", replacement = "x", x = regex_vec) gsub(pattern = "[[:alpha:]]+", replacement = "0", x = regex_vec) ``` +The [`stringr` package cheatsheet](https://github.com/rstudio/cheatsheets/blob/afaa1fec4c5b9aabfa886218b6ba20317446d378/strings.pdf) has a really nice list of regular expression options that you may find valuable if you want to delve deeper on this topic. Scroll to the second page of the PDF to see the most relevant parts. + ### Conditionals Rather than finding and replacing content, you may want to create a new column based on the contents of a different column. In plain language you might phrase this as 'if column X has \[some values\] then column Y should have \[other values\]'. These operations are called conditionals and are an important part of data wrangling. @@ -288,25 +290,30 @@ Note in this output how despite re-combining data information the column is list ### Joining Data -Often the early steps of a synthesis project involve combine the data tables horizontally. You might imagine that you have two groups' data on sea star abundance and--once you've synonymized the column names--you can simply 'stack' the tables on top of one another. Slightly trickier but no less common is combining tables by the contents of a shared column (or columns). Cases like this include wanting to combine your sea star table with ocean temperature data from the region of each group's research. You can't simply attach the columns because that assumes that the row order is identical between the two data tables (and indeed, that there are the same number of rows in both to begin with!). In this case, if both data tables shared some columns (perhaps "site" and coordinate columns) you can use **joins** to let your computer match these key columns and make sure that only appropriate rows are combined. +Often the early steps of a synthesis project involve combining the data tables horizontally. You might imagine that you have two groups' data on sea star abundance and--once you've synonymized the column names--you can simply 'stack' the tables on top of one another. Slightly trickier but no less common is combining tables by the contents of a shared column (or columns). Cases like this include wanting to combine your sea star table with ocean temperature data from the region of each group's research. You can't simply attach the columns because that assumes that the row order is identical between the two data tables (and indeed, that there are the same number of rows in both to begin with!). In this case, if both data tables shared some columns (perhaps "site" and coordinate columns) you can use **joins** to let your computer match these key columns and make sure that only appropriate rows are combined. Because joins are completely dependent upon the value in both columns being an _exact_ match, it is a good idea to carefully check the contents of those columns before attempting a join to make sure that the join will be successful. -```{r diff-check} +```{r diff-check-1} # Create a fish taxonomy dataframe that corresponds with the earlier fish dataframe fish_tax <- data.frame("species" = c("salmon", "bass", "halibut", "eel"), "family" = c("Salmonidae", "Serranidae", "Pleuronectidae", "Muraenidae")) # Check to make sure that the 'species' column matches between both tables supportR::diff_check(old = fish_ct$species, new = fish_tax$species) +``` +```{r diff-check-2} # Use text replacement methods to fix that mistake in one table fish_tax_v2 <- fish_tax %>% - dplyr::mutate(species = gsub(pattern = "^eel$", replacement = "moray eel", x = species)) + dplyr::mutate(species = gsub(pattern = "^eel$", # <1> + replacement = "moray eel", + x = species)) # Re-check to make sure that fixed it supportR::diff_check(old = fish_ct$species, new = fish_tax_v2$species) ``` +1. The symbols around "eel" mean that we're only finding/replacing _exact_ matches. It doesn't matter in this context but often replacing a partial match would result in more problems. For example, replacing "eel" with "moray eel" could make "electric eel" into "electric moray eel". Now that the shared column matches between the two two dataframes we can use a join to combine them! There are four types of join: @@ -431,12 +438,13 @@ for(focal_size in unique(pie_crab_v4$size_category)){ # <1> } # Close loop # Unlist the outputs into a dataframe -crab_df <- purrr::list_rbind(x = crab_list) +crab_df <- purrr::list_rbind(x = crab_list) # <2> # Check out the resulting data table crab_df ``` 1. Note that this is not the most efficient way of doing group-wise summarization but is--hopefully--a nice demonstration of loops! +2. When all elements of your list have the same column names, `list_rbind` efficiently stacks those elements into one longer data table. ### Custom Functions @@ -463,7 +471,7 @@ crab_hist <- function(df, size_cat){ crab_hist(df = pie_crab_v4, size_cat = "tiny") ``` -When writing your own functions is can also be useful to program defensively. This involves anticipating likely errors and writing your own error messages that are more informative to the user than whatever machine-generated error would otherwise get generated +When writing your own functions it can also be useful to program defensively. This involves anticipating likely errors and writing your own error messages that are more informative to the user than whatever machine-generated error would otherwise get generated ```{r custom-fxns-improved} #| fig-align: center @@ -478,7 +486,7 @@ crab_hist <- function(df, size_cat = "small"){ # <1> stop("'df' must be provided as a data frame") # Error out if the data doesn't have the right columns - if(all(c("size_category", "size") %in% names(df)) != TRUE) + if(all(c("size_category", "size") %in% names(df)) != TRUE) # <3> stop("'df' must include a 'size' and 'size_category' column") # Error out for unsupported size category values @@ -493,11 +501,12 @@ crab_hist <- function(df, size_cat = "small"){ # <1> } # Invoke new-and-improved function -crab_hist(df = pie_crab_v4) # <3> +crab_hist(df = pie_crab_v4) # <4> ``` 1. The default category is now set to "small" -2. I recommend phrasing your error checks like this (i.e., 'if \ is _not_ true, then \) -3. We don't need to specify the 'size_cat' argument because we can rely on the default +2. We recommend phrasing your error checks with this format (i.e., 'if \ is _not_ true, then \) +3. The `%in%` operator lets you check whether one value matches any element of a set of accepted values. Very useful in contexts like this because the alternative would be a lot of separate "or" conditionals +4. We don't need to specify the 'size_cat' argument because we can rely on the default :::{.callout-note icon="false"} #### Activity: Custom Functions