---
title: "Get started"
date: "`r Sys.Date()`"
author: "Adrian Maldet"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Get started}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  echo = TRUE,
  message = FALSE,
  warning = FALSE,
  collapse = TRUE,
  comment = "#>"
)
fig_path <- function(file) {
  dir <- knitr::opts_chunk$get("fig.path")
  dir.create(dir, showWarnings = FALSE, recursive = TRUE)
  paste0(dir, file)
}
pkgdown_link <- function(text, file) {
  url <- file.path(
    "https://a-maldet.github.io/labelmachine/articles/labelmachine_files",
    "figure-html", file
  )
  paste0("[", text, "](", url, ")")
}
```

`labelmachine` is an **R** package that helps assigning meaningful
labels to R data sets.
Manage your labels in **yaml** files, so called **lama-dictionary** files.
This makes it very easy using the same label translations in multiple
projects that share similar data structure.

> Labeling your data can be easy!


## Installation

```{r, eval = FALSE}
# Install release version from CRAN
install.packages("labelmachine")

# Install development version from GitHub
devtools::install_github('a-maldet/labelmachine', build_vignettes = TRUE)
```

## The example data frame

Let us assume, you want to label the following data frame `df`:

```{r}
df <- data.frame(
  pupil_id = rep(1:4, each = 3),
  subject = rep(c("eng", "mat", "gym"), 4),
  result = c(1, 2, 2, NA, 2, NA, 1, 0, 1, 2, 3, NA),
  stringsAsFactors = FALSE
)
df
```

The column `subject` contains the subject codes the pupils were tested in and
`result` contains the test results.

## Your first lama-dictionary

In order to assign labels to the values in the columns of `df`, we need a 
**lama-dictionary** which holds the translations of the variables. 
With the command `new_lama_dictionary()` we can create such a lama-dictionary:

```{r}
library(labelmachine)
dict <- new_lama_dictionary(
  sub = c(eng = "English", mat = "Mathematics", gym = "Gymnastics"),
  res = c(
    "1" = "Good",
    "2" = "Passed",
    "3" = "Not passed",
    "4" = "Not passed",
    NA_ = "Missed",
    "0" = NA
  )
)
dict
```

Each entry in `dict` is a translation for a variable (column) of the
data frame `df`.
The translation `sub` can be used to assign labels to the values given in
column `subject` in `df` and translation `res` can be used to assign labels
to the values in column `result` in `df`.
The expression `NA_` is used to escape the missing value symbol `NA`.
Hence, the last assignment `NA_ = "Missed"` defines that missing values
should be labeled with the string `"Missed"`.
For further details on creating lama-dictionaries
see [Creating lama-dictionaries] and [Altering lama-dictionaries].

## Translate the data frame columns

With the command `lama_translate`, we can use the lama-dictionary `dict`
in order to translate the  variables given in data frame `df`:

```{r}
df_new <- lama_translate(
    df,
    dict,
    subject_lab = sub(subject),
    result_lab = res(result)
  )
str(df_new)
```

As we can see, the resulting data frame `df_new` now holds two extra columns
`subject_lab` and `result_lab` holding the factor variables with the right
labels.
The command `lama_translate` has multiple features, which are described in 
more detail in [Translating variables].

## Save your lama-dictionary

With the command `lama_write` it is possible to save the lama-dictionary object
to a **yaml** file:
```{r, eval = FALSE}
path_to_file <- file.path(tempdir(), "my_dictionary.yaml")
lama_write(dict, path_to_file)
```

The resulting **yaml** file is a plain text file with a special text structure,
see `r pkgdown_link("dictionary.yaml", "dictionary.yaml")`.

Lama-dictionary files make it easy to share lama-dictionaries with
other projects holding similar data structures. With the command `lama_read`
a lama-dictionary file can be read:

```{r, eval = FALSE}
path_to_file <- system.file("extdata", "dictionary_exams.yaml", package = "labelmachine")
dict <- lama_read(path_to_file)
```

## Further reading

* [Creating lama-dictionaries]
* [Translating variables]
* [Altering lama-dictionaries]

[Get started]: https://a-maldet.github.io/labelmachine/articles/labelmachine.html
[Creating lama-dictionaries]: https://a-maldet.github.io/labelmachine/articles/create_dictionaries.html
[Altering lama-dictionaries]: https://a-maldet.github.io/labelmachine/articles/alter_dictionaries.html
[Translating variables]: https://a-maldet.github.io/labelmachine/articles/translate.html
