The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

The following examples use the following table_string helper to succintly define tables:

# Convert a string into a data.frame
table_string <- function (text, ...) read.table(
    text = text,
    blank.lines.skip = TRUE,
    header = TRUE,
    stringsAsFactors = FALSE,
    ...)

Firstly, connect to a database and set up some areas/divisions:

mdb <- mfdb(tempfile(fileext = '.duckdb'))
mfdb_import_area(mdb, table_string('
name  division size
45G01     divA   10
45G02     divA  200
45G03     divB  400
'))

Importing Data

Before any measurements assoicated with a tow can be imported, we need to define the tows that they will be associated with, and attributes such as length:

mfdb_import_tow_taxonomy(mdb, table_string('
name latitude longitude  depth length
   A     64.1    -23.15  98.82     10
   B     63.4    -20.18  44.90     10
   C     64.9    -13.55 140.91     20
   D     66.2    -18.55 122.61     20
'))

For other possible columns, see ?mfdb_import_tow_taxonomy.

Now tows are defined, we can import data that uses these definitions:

mfdb_import_survey(mdb, data_source = "tow_example_a",
    table_string("
year    month   areacell        species tow  length  age     weight
2000    1       45G01           COD     A    21      2       210
2000    1       45G02           COD     A    34      3       220
2000    1       45G03           COD     A    34      3       230
2000    1       45G01           COD     B    62      1       320
2000    1       45G02           COD     B    53      1       330
2000    1       45G03           COD     B    54      2       430
2000    1       45G01           COD     C    28      2       210
2000    1       45G02           COD     C    34      3       220
2000    1       45G03           COD     C    24      3       230
2000    1       45G01           COD     D    12      1       320
2000    1       45G02           COD     D    44      1       330
2000    1       45G03           COD     D    14      2       430
    "))

Importing Data: Longlines

mfdb_import_tow_taxonomy also allows us to import bait_type and hook_count, useful when importing data from longline fisheries.

As with other taxonomy tables, we have to first define bait types before we can use them:

mfdb_import_bait_type_taxonomy(mdb, table_string('
name    description
b1  "Bait type 1"
b2  "Bait type 2"
b3  "Bait type 3"
'))

…and then use mfdb_import_tow_taxonomy as before. Since the names don’t overlap with the previous call, the old tow definitions won’t be removed:

mfdb_import_tow_taxonomy(mdb, table_string('
name latitude longitude  length hook_count bait_type
 llA     63.4    -20.18      11         30       b1
 llB     63.4    -20.18      12         30       b2
 llC     63.4    -20.18      13         30       b3
'))

Finally, import some data using these definitions:

mfdb_import_survey(mdb, data_source = 'longline', table_string('
year    month   areacell        species tow  length age weight
2000    1   45G01       COD llA 12  15  236
2000    1   45G01       COD llA 47  6   243
2000    1   45G01       COD llA 92  11  118
2000    1   45G01       COD llB 13  14  392
2000    1   45G01       COD llB 15  4   169
2000    1   45G01       COD llB 52  3   272
2000    1   45G01       COD llC 85  10  132
2000    1   45G01       COD llC 94  9   342
2000    1   45G01       COD llC 71  12  375
    '))

Importing Data: Gillnets

mfdb_import_tow_taxonomy also allows us to import net_count, net_type and mesh_size, useful when importing data from Gillnet fisheries.

Again, we need to define net types first:

mfdb_import_net_type_taxonomy(mdb, table_string('
name    description
black   Black
orange  Orange
white   White
'))

…define the tows:

# Add more detailed information for gillnets
mfdb_import_tow_taxonomy(mdb, table_string('
name latitude longitude  length net_count net_type mesh_size
 gnA     63.4    -20.18      21         2  black         6
 gnB     63.4    -20.18      22         2  orange        7
 gnC     63.4    -20.18      23         2  white         8
'))

…and import some data using these definitions:

mfdb_import_survey(mdb, data_source = 'gillnet', table_string('
year    month   areacell        species tow  length age weight
2000    1   45G01       COD gnA 34  10  314
2000    1   45G01       COD gnA 45  14  255
2000    1   45G01       COD gnA 48  5   322
2000    1   45G01       COD gnB 24  8   170
2000    1   45G01       COD gnB 83  7   122
2000    1   45G01       COD gnB 15  4   152
2000    1   45G01       COD gnC 33  14  311
2000    1   45G01       COD gnC 79  6   373
2000    1   45G01       COD gnC 57  5   186
    '))

Querying data

We can now use the mfdb_sample_* functions to select this data back out again. We can group and filter by any of the tow attributes. For instance, to group/filter by tow_depth:

agg_data <- mfdb_sample_meanlength(mdb, c('tow_depth'), list(
    step = mfdb_timestep_yearly,
    tow_depth = mfdb_interval('depth', c(0, 50, 100, 150)),
    null = NULL))
agg_data
## $`0.0.0.0`
##   year step area tow_depth number     mean
## 1  all    1  all    depth0      3 56.33333
## 2  all    1  all  depth100      6 26.00000
## 3  all    1  all   depth50      3 29.66667

Any of the other tow attributes are available with a “tow_” prefix. For example, we can show metadata per tow by using mfdb_unaggregated:

# Show all tow data unaggregated
agg_data <- mfdb_sample_meanlength(mdb, c('tow', 'tow_latitude', 'tow_longitude', 'tow_depth', 'tow_length'), list(
    step = mfdb_timestep_yearly,
    area = mfdb_group(divB = 'divB'),
    tow = mfdb_unaggregated(),
    tow_latitude = mfdb_unaggregated(),
    tow_longitude = mfdb_unaggregated(),
    tow_depth = mfdb_unaggregated(),
    tow_length = mfdb_unaggregated(),
    null = NULL))
agg_data
## $`0.0.0.0.0.0.0.0`
##   year step area tow tow_latitude tow_longitude tow_depth tow_length number
## 1  all    1 divB   A         64.1        -23.15     98.82         10      1
## 2  all    1 divB   B         63.4        -20.18     44.90         10      1
## 3  all    1 divB   C         64.9        -13.55    140.91         20      1
## 4  all    1 divB   D         66.2        -18.55    122.61         20      1
##   mean
## 1   34
## 2   54
## 3   24
## 4   14

As well as using tow attributes to group/filter, we can use the tow to scale the output of the query. For example, the following scales mean length by tow length, for each tow:

agg_data <- mfdb_sample_meanlength(mdb, c('tow'), list(
    step = mfdb_timestep_yearly,
    tow = mfdb_unaggregated(),
    null = NULL), scale_index = 'tow_length')
agg_data
## $`0.0.0.0`
##    year step area tow    number     mean
## 1   all    1  all   A 0.3000000 29.66667
## 2   all    1  all   B 0.3000000 56.33333
## 3   all    1  all   C 0.1500000 28.66667
## 4   all    1  all   D 0.1500000 23.33333
## 5   all    1  all gnA 0.1428571 42.33333
## 6   all    1  all gnB 0.1363636 40.66667
## 7   all    1  all gnC 0.1304348 56.33333
## 8   all    1  all llA 0.2727273 50.33333
## 9   all    1  all llB 0.2500000 26.66667
## 10  all    1  all llC 0.2307692 83.33333

…or scale by tow length whilst grouping by depth:

agg_data <- mfdb_sample_scaled(mdb, c('tow_depth'), list(
    step = mfdb_timestep_yearly,
    tow_depth = mfdb_interval('depth', c(0, 50, 100, 150)),
    null = NULL), scale = 'tow_length')
agg_data
## $`0.0.0.0`
##   year step area tow_depth number mean_weight
## 1  all    1  all    depth0   0.10   1.8777778
## 2  all    1  all  depth100   0.05   0.2166667
## 3  all    1  all   depth50   0.10   0.9888889

An example of grouping by tow_bait_type:

agg_data <- mfdb_sample_count(mdb, c('tow_bait_type'), list(
    tow_bait_type = mfdb_unaggregated()))
agg_data
## $`0.0.0.0`
##   year step area tow_bait_type number
## 1  all  all  all          <NA>     21
## 2  all  all  all            b1      3
## 3  all  all  all            b2      3
## 4  all  all  all            b3      3

And finally tow_net_type:

agg_data <- mfdb_sample_count(mdb, c('tow_net_type'), list(
    tow_net_type = mfdb_unaggregated()))
agg_data
## $`0.0.0.0`
##   year step area tow_net_type number
## 1  all  all  all         <NA>     21
## 2  all  all  all        black      3
## 3  all  all  all       orange      3
## 4  all  all  all        white      3
mfdb_disconnect(mdb)

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.