Xinxin Yang's avatar
Xinxin Yang committed

<!-- README.md is generated from README.Rmd. Please edit that file -->

Xinxin Yang's avatar
Xinxin Yang committed
# fadnUtils

Xinxin Yang's avatar
Xinxin Yang committed
Develop by Dimitrios Kremmydas (JRC) and Xinxin Yang (THÜNEN)

The fadnUtils package facilitates the efficient handling of FADN data
within the R language framework. Furthermore, the package is targeted
for use within the JRC D.4 context. This means that there is a specific
temporal pattern of how a user interacts with the package (see Figure
plot). ![plot](inst/examples/pic/workflow.png)
Xinxin Yang's avatar
Xinxin Yang committed

More specifically, after a request for FADN data from DG-AGRI, this data
is delivered to JRC D.4 in csv format.
Xinxin Yang's avatar
Xinxin Yang committed

Xinxin Yang's avatar
Xinxin Yang committed
# Installation

You can install the development version from Thuenen or IIASA Gitlab
with:
Xinxin Yang's avatar
Xinxin Yang committed

``` r
# Thuenen gitlab
devtools::install_git("https://git-dmz.thuenen.de/mindstep/fadnutilspackages", force = TRUE)
# IIASA gitlab
devtools::install_git("https://gitlab.iiasa.ac.at/mind-step/fadnutilspackage")
```

Then the Related R packages can be installed.
Xinxin Yang's avatar
Xinxin Yang committed

Xinxin Yang's avatar
Xinxin Yang committed
``` r
Xinxin Yang's avatar
Xinxin Yang committed
library(fadnUtils)
```

    ## fadnUtils is loaded.

``` r
requiredPackages = c('data.table', 'devtools','jsonlite', 'ggplot2')
Xinxin Yang's avatar
Xinxin Yang committed
for(p in requiredPackages){
  if(!require(p,character.only = TRUE)) install.packages(p)
  library(p,character.only = TRUE)
}
```

Xinxin Yang's avatar
Xinxin Yang committed
    ## Loading required package: data.table

    ## Loading required package: devtools

    ## Loading required package: usethis

    ## Loading required package: jsonlite

    ## Loading required package: ggplot2

Xinxin Yang's avatar
Xinxin Yang committed
# Usage in Brief

After loaded the packages, you will have a functional R package on your
computer. Then, we will talk about using your package online.
Xinxin Yang's avatar
Xinxin Yang committed

1.  Create a working directory
    - a user-defined data directory
Xinxin Yang's avatar
Xinxin Yang committed
2.  Import CSV FADN data
    - convert the csv data into raw r-data
    - convert raw r-data into str r-data
Xinxin Yang's avatar
Xinxin Yang committed
3.  Load r-data and structured r-data
4.  Perform analysis
5.  Translate between various NUTS Version (FADN Region, NUTS1, NUTS2,
    NUTS2)
Xinxin Yang's avatar
Xinxin Yang committed

## 1. Create a working directory
Xinxin Yang's avatar
Xinxin Yang committed

Working directory is a path that sets the location of any files your
save from R. User sets a working directory. Make sure the relative path
stays within `CurrentProjectDirectory`.
Xinxin Yang's avatar
Xinxin Yang committed

``` r
Xinxin Yang's avatar
Xinxin Yang committed
# using a local directory
CurrentProjectDirectory = "D:/public/yang/MIND_STEP/New_test_fadnUtils"
create.data.dir(folder.path = CurrentProjectDirectory)
Xinxin Yang's avatar
Xinxin Yang committed
```

    ## This is already a data.dir structure. Doing nothing.

``` r
Xinxin Yang's avatar
Xinxin Yang committed
set.data.dir(CurrentProjectDirectory)
get.data.dir()
```
Xinxin Yang's avatar
Xinxin Yang committed

    ## [1] "D:/public/yang/MIND_STEP/New_test_fadnUtils"

Xinxin Yang's avatar
Xinxin Yang committed
### Required files
Xinxin Yang's avatar
Xinxin Yang committed

We request FADN data from DG-AGRI, which is delivered to us in csv
format. In order to work efficiently with R, we should convert the
csv-data to an r friendly format, this step is done with help of a
human-readable file, called `raw_str_map.file`. Both files are
necessary. `inst/examples` is the folder for use cases that contain
fadnUtils package examples and json files.
Xinxin Yang's avatar
Xinxin Yang committed

Xinxin Yang's avatar
Xinxin Yang committed
1.  FADN data in csv format: the data for loading
2.  A json file for extracting the variables

### Folder Structure
Xinxin Yang's avatar
Xinxin Yang committed

A working directory is specified arbitrarily by the user. This structure
helps data management and maintenance. The directory looks like this:
Xinxin Yang's avatar
Xinxin Yang committed

Xinxin Yang's avatar
Xinxin Yang committed
``` base
Xinxin Yang's avatar
Xinxin Yang committed
CurrentProjectDirectory/
+-- csv
+-- fadnUtils.metadata.json
+-- rds
\-- spool
    \-- readme.txt
```
Xinxin Yang's avatar
Xinxin Yang committed

- csv: CSV files are stored here
- fadnUtils.metadata.json: containing the mapping from the fadn.raw.rds
  to the fadn.str.rds data
- rds: placing r-data in the “rds” directory
- spool: keeping related files
Xinxin Yang's avatar
Xinxin Yang committed

## 2. Import CSV FADN data
Xinxin Yang's avatar
Xinxin Yang committed

First, we will import the data into an R-friendly format using the
fadnUtils package.
Xinxin Yang's avatar
Xinxin Yang committed

### Convert the csv data into raw r-data
Xinxin Yang's avatar
Xinxin Yang committed

The raw data will be added to a `rds` directory. We use a convenient
function from this package to convert the csv file into raw r-data.
Xinxin Yang's avatar
Xinxin Yang committed

Xinxin Yang's avatar
Xinxin Yang committed
``` r
Xinxin Yang's avatar
Xinxin Yang committed
fadn.data.dir <- "D:/public/data/fadn/lieferung_20210414/csv/"
Xinxin Yang's avatar
Xinxin Yang committed
# load data for country BEL and year 2009
Xinxin Yang's avatar
Xinxin Yang committed
convert.to.fadn.raw.rds(
Xinxin Yang's avatar
Xinxin Yang committed
      file.path =  paste0(fadn.data.dir, "BEL2009.csv"),
Xinxin Yang's avatar
Xinxin Yang committed
      sepS = ",",
Xinxin Yang's avatar
Xinxin Yang committed
      fadn.country = "BEL",
Xinxin Yang's avatar
Xinxin Yang committed
      fadn.year = 2009
      #keep.csv = T # copy csv file in csv.dir
Xinxin Yang's avatar
Xinxin Yang committed
      )
Xinxin Yang's avatar
Xinxin Yang committed
```
Xinxin Yang's avatar
Xinxin Yang committed

    ## File D:/public/data/fadn/lieferung_20210414/csv/BEL2009.csv does not exist. Exiting ...

    ## [1] FALSE

At any time, we can check for the current data dir, what csv files
(countries, year) are loaded.
Xinxin Yang's avatar
Xinxin Yang committed

``` r
Xinxin Yang's avatar
Xinxin Yang committed
show.data.dir.contents()
```

### Convert raw r-data into structured r-data

Then, We convert raw data into structured data. Broadly, there are 3
steps to including data in an R package:
Xinxin Yang's avatar
Xinxin Yang committed

1.  setting a structured data in the `structured` directory,
2.  checking the `raw_str_map.file` that all variables can be converted.
3.  converting the structured data successfully into `structured`
    directory.
Xinxin Yang's avatar
Xinxin Yang committed

#### Set a `structured` directory for saving the structured data
Xinxin Yang's avatar
Xinxin Yang committed

Xinxin Yang's avatar
Xinxin Yang committed
We set a `test` folder to placing the structured data.

Xinxin Yang's avatar
Xinxin Yang committed
``` r
Xinxin Yang's avatar
Xinxin Yang committed
rds.dir = paste0(get.data.dir(),"/rds/")
# set a structured name for for saving the structured r-data in rds.dir
new.str.name = "test"
# set a extraction_dir
dir.create(paste0(rds.dir, new.str.name), showWarnings = FALSE)
Xinxin Yang's avatar
Xinxin Yang committed
new.extraction.dir = paste0(rds.dir, new.str.name)
```

#### Check the variables in the `raw_str_map.file`
Xinxin Yang's avatar
Xinxin Yang committed

Before conversion it is recommended to use `check.column()` method,
ensuring that all variables in the`raw_str_map.file` can be converted.
Xinxin Yang's avatar
Xinxin Yang committed

``` r
Xinxin Yang's avatar
Xinxin Yang committed
list_vars = check.column(
              # a rds file or a csv file
Xinxin Yang's avatar
Xinxin Yang committed
              importfilepath = paste0(rds.dir, "fadn.raw.2009.BEL.rds"),
Xinxin Yang's avatar
Xinxin Yang committed
              # a json file
              jsonfile = "D:/public/yang/MIND_STEP/2014_after_copy.json",
              # write a new json file without unmatched variables
              rewrite_json = T,
              # save the new json in extraction_dir
              extraction_dir = new.extraction.dir)
Xinxin Yang's avatar
Xinxin Yang committed
```

#### Convert the raw data into structured r-data using the checked json file
Xinxin Yang's avatar
Xinxin Yang committed

Finally, We can convert a raw r-data to str r-data using a external json
file. For more details on converting in fadnUtils packages,
`see USE_CASE.R`.