This document introduces you to the swfscDAS package, and specifically its functionality and workflow. This package is intended to standardize and streamline processing of shipboard DAS data collected using the WinCruz program from the Southwest Fisheries Science Center. In DAS data, an event is only recorded when something changes or happens, which can complicate processing. Thus, the main theme of this package is enabling analyses and downstream processing by 1) determining associated state and condition information for each event and 2) pulling out event-specific information from the Data (Field) columns.
This package includes a sample DAS file, which we will use in this document
y <- system.file("das_sample.das", package = "swfscDAS")
head(readLines(y))
#> [1] "1 B.062739 011313 N39:19.22 W137:36.26 1000 c 5 Y "
#> [2] "2 R.062739 011313 N39:19.22 W137:36.26 S "
#> [3] "3 P.062739 011313 N39:19.22 W137:36.26 280 001 126 "
#> [4] "4 V.062739 011313 N39:19.22 W137:36.26 3 03 230 10.0 "
#> [5] "5 N.062739 011313 N39:19.22 W137:36.26 023 09.8 "
#> [6] "6 W.062739 011313 N39:19.22 W137:36.26 1 250 6.0 "
The first step in processing DAS data is to ensure that the DAS file has expected formatting and values. This package contains the das_check
function, which performs some basic checks. This function is a precursor to a more comprehensive DASCHECK program, which is currently in development. The checks performed by this function are detailed in the function documentation, which can be accessed by running ?das_check
. You can find the PDF with the expected DAS data format at https://smwoodman.github.io/swfscDAS/, or see ?das_format_pdf
for how to access a local copy. To check for valid species codes using this function, you can pass the function an SpCodes.dat file
Once QA/QC is complete and you have fixed any data entry errors, you can begin to process the DAS data. The backbone of this package is the reading and processing steps: 1) the data from the DAS file are read into the columns of a data frame and 2) state and condition information are extracted for each event. This means that after processing, you can simply look at any event (row) and determine the Beaufort, viewing conditions, etc., at the time of the event. All other functions in the package depend on the DAS data being in this processed state.
# Read
y.read <- das_read(y, skip = 0)
glimpse(y.read)
#> Registered S3 method overwritten by 'cli':
#> method from
#> print.boxx spatstat
#> Rows: 259
#> Columns: 20
#> $ Event <chr> "B", "R", "P", "V", "N", "W", "V", "W", "W", "*", "P", "V...
#> $ EffortDot <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRU...
#> $ DateTime <dttm> 2013-01-13 06:27:39, 2013-01-13 06:27:39, 2013-01-13 06:...
#> $ Lat <dbl> 39.32033, 39.32033, 39.32033, 39.32033, 39.32033, 39.3203...
#> $ Lon <dbl> -137.6043, -137.6043, -137.6043, -137.6043, -137.6043, -1...
#> $ Data1 <chr> "1000", "S", "280", "3", "023", "1", "3", "1", "1", NA, "...
#> $ Data2 <chr> "c", NA, "001", "03", "09.8", NA, "03", "02", NA, NA, "28...
#> $ Data3 <chr> "5", NA, "126", "230", NA, NA, "230", "03", NA, NA, "001"...
#> $ Data4 <chr> "Y", NA, NA, NA, NA, "250", NA, "257", "257", NA, NA, NA,...
#> $ Data5 <chr> NA, NA, NA, "10.0", NA, "6.0", "10.0", "6.0", "6.0", NA, ...
#> $ Data6 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "...
#> $ Data7 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "...
#> $ Data8 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "...
#> $ Data9 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ Data10 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ Data11 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ Data12 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ EventNum <chr> "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", ...
#> $ file_das <chr> "das_sample.das", "das_sample.das", "das_sample.das", "da...
#> $ line_num <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17...
# Process
y.proc <- das_process(y)
glimpse(y.proc)
#> Rows: 256
#> Columns: 39
#> $ Event <chr> "B", "R", "P", "V", "N", "W", "V", "W", "W", "*", "P", "V...
#> $ DateTime <dttm> 2013-01-13 06:27:39, 2013-01-13 06:27:39, 2013-01-13 06:...
#> $ Lat <dbl> 39.32033, 39.32033, 39.32033, 39.32033, 39.32033, 39.3203...
#> $ Lon <dbl> -137.6043, -137.6043, -137.6043, -137.6043, -137.6043, -1...
#> $ OnEffort <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRU...
#> $ Cruise <dbl> 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 100...
#> $ Mode <chr> "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C...
#> $ EffType <chr> NA, "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S"...
#> $ ESWsides <dbl> NA, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,...
#> $ Course <dbl> NA, NA, NA, NA, 23, 23, 23, 23, 23, 23, 23, 23, 25, 25, 2...
#> $ SpdKt <dbl> NA, NA, NA, NA, 9.8, 9.8, 9.8, 9.8, 9.8, 9.8, 9.8, 9.8, 1...
#> $ Bft <dbl> NA, NA, NA, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, ...
#> $ SwellHght <dbl> NA, NA, NA, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, ...
#> $ WindSpdKt <dbl> NA, NA, NA, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1...
#> $ RainFog <dbl> NA, NA, NA, NA, NA, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
#> $ HorizSun <dbl> NA, NA, NA, NA, NA, NA, NA, 2, NA, NA, NA, NA, NA, NA, NA...
#> $ VertSun <dbl> NA, NA, NA, NA, NA, NA, NA, 3, NA, NA, NA, NA, NA, NA, NA...
#> $ Glare <lgl> NA, NA, NA, NA, NA, NA, NA, FALSE, NA, NA, NA, NA, NA, NA...
#> $ Vis <dbl> NA, NA, NA, NA, NA, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6...
#> $ ObsL <chr> NA, NA, "280", "280", "280", "280", "280", "280", "280", ...
#> $ Rec <chr> NA, NA, "001", "001", "001", "001", "001", "001", "001", ...
#> $ ObsR <chr> NA, NA, "126", "126", "126", "126", "126", "126", "126", ...
#> $ ObsInd <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ Data1 <chr> "1000", "S", "280", "3", "023", "1", "3", "1", "1", NA, "...
#> $ Data2 <chr> "c", NA, "001", "03", "09.8", NA, "03", "02", NA, NA, "28...
#> $ Data3 <chr> "5", NA, "126", "230", NA, NA, "230", "03", NA, NA, "001"...
#> $ Data4 <chr> "Y", NA, NA, NA, NA, "250", NA, "257", "257", NA, NA, NA,...
#> $ Data5 <chr> NA, NA, NA, "10.0", NA, "6.0", "10.0", "6.0", "6.0", NA, ...
#> $ Data6 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "...
#> $ Data7 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "...
#> $ Data8 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "...
#> $ Data9 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ Data10 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ Data11 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ Data12 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ EffortDot <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRU...
#> $ EventNum <chr> "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", ...
#> $ file_das <chr> "das_sample.das", "das_sample.das", "das_sample.das", "da...
#> $ line_num <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17...
# Note that das_read can read multiple files at once
y2.read <- das_read(c(y, y))
Once you have processed the DAS data, you can easily access a variety of information. For instance, you can look at the different events or Beaufort values that occurred in the data, or filter for specific events to get the beginning and ending points of each effort section.
# The number of each event
table(y.proc$Event)
#>
#> * 1 2 3 4 ? A B C E F N P R S V W s t
#> 90 8 7 6 2 1 8 2 5 10 1 19 18 10 8 22 26 7 6
# The number of events per Beaufort value
table(y.proc$Bft)
#>
#> 2 3
#> 94 120
# Filter for T/R and O/E events to extract lat/lon points
y.proc %>%
filter(Event %in% c("R", "E")) %>%
select(Event, Lat, Lon, Cruise, Mode, EffType) %>%
head()
#> Event Lat Lon Cruise Mode EffType
#> 1 R 39.32033 -137.6043 1000 C S
#> 2 E 39.36717 -137.5817 1000 C S
#> 3 R 39.37617 -137.5978 1000 C S
#> 4 E 39.51933 -137.5277 1000 C S
#> 5 R 39.56800 -137.4530 1000 C S
#> 6 E 39.75433 -137.4107 1000 C S
The swfscDAS
package does contain specific functions for extracting and/or summarizing particular information from the processed data. First is das_sight
, a function that returns a data frame with pertinent sighting data pulled out to their own columns. Due to the different data collected for each type of sighting and the different needs of end-users, this function offers several different return formats. For the “default” format there is one row for each species of each sighting, for the “wide” format, there is one row for each sighting event, and for the “complete” format there is one row for every group size estimate for each sighting. See ?das_sight
for more details. The “complete” format is intended for users looking to do observer corrections, or to combine estimates using a different method than the arithmetic mean (e.g. the geometric mean)
y.sight <- das_sight(y.proc, return.format = "default")
y.sight %>%
select(Event, SightNo:PerpDistKm) %>%
glimpse()
#> Rows: 25
#> Columns: 32
#> $ Event <chr> "S", "S", "s", "s", "s", "s", "s", "s", "t", "t", "t",...
#> $ SightNo <chr> "1406", "1407", "1407", "1407", "1407", "1407", "1407"...
#> $ Subgroup <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SightNoDaily <chr> "20130113_1", "20130113_2", NA, NA, NA, NA, NA, NA, NA...
#> $ Obs <chr> "208", "125", NA, NA, NA, NA, NA, NA, "280", "149", "2...
#> $ ObsStd <lgl> TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, ...
#> $ Bearing <dbl> 309, 326, 11, 5, 50, 71, 104, 2, 120, 270, 300, 270, 4...
#> $ Reticle <dbl> 2.8, 0.4, 2.0, 3.5, NA, 4.5, 4.5, 2.2, NA, NA, NA, 14....
#> $ DistNm <dbl> 1.06, 2.97, 1.30, 0.90, 0.50, 0.70, 0.70, 1.30, 0.03, ...
#> $ Cue <dbl> 3, 3, NA, NA, NA, NA, NA, NA, NA, NA, NA, 3, NA, 3, NA...
#> $ Method <dbl> 4, 4, NA, NA, NA, NA, NA, NA, NA, NA, NA, 4, NA, 4, NA...
#> $ Photos <chr> "N", "Y", NA, NA, NA, NA, NA, NA, NA, NA, NA, "N", NA,...
#> $ Birds <chr> "N", "N", NA, NA, NA, NA, NA, NA, NA, NA, NA, "N", NA,...
#> $ CalibSchool <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ PhotosAerial <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ Biopsy <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ Prob <lgl> FALSE, FALSE, NA, NA, NA, NA, NA, NA, NA, NA, NA, FALS...
#> $ nSp <int> 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, 1, NA...
#> $ Mixed <lgl> FALSE, FALSE, NA, NA, NA, NA, NA, NA, NA, NA, NA, FALS...
#> $ SpCode <chr> "018", "076", NA, NA, NA, NA, NA, NA, "LV", "DC", "DC"...
#> $ SpCodeProb <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ GsSchoolBest <dbl> NA, 8.00000, NA, NA, NA, NA, NA, NA, 1.00000, 2.00000,...
#> $ GsSchoolHigh <dbl> NA, 14.00, NA, NA, NA, NA, NA, NA, NA, NA, NA, 20.00, ...
#> $ GsSchoolLow <dbl> 42.333333, 5.666667, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ GsSpBest <dbl> NA, 8.00000, NA, NA, NA, NA, NA, NA, 1.00000, 2.00000,...
#> $ GsSpHigh <dbl> NA, 14.000, NA, NA, NA, NA, NA, NA, NA, NA, NA, 20.000...
#> $ GsSpLow <dbl> 42.333333, 5.666667, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ CourseSchool <dbl> NA, NA, NA, NA, NA, 100, 100, NA, NA, NA, NA, NA, NA, ...
#> $ TurtleJFR <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ TurtleAge <chr> NA, NA, NA, NA, NA, NA, NA, NA, "A", "A", "J", NA, "A"...
#> $ TurtleCapt <chr> NA, NA, NA, NA, NA, NA, NA, NA, "N", "N", "N", NA, NA,...
#> $ PerpDistKm <dbl> 1.525631e+00, 3.075807e+00, 4.593917e-01, 1.452712e-01...
y.sight.wide <- das_sight(y.proc, return.format = "wide")
y.sight.wide %>%
select(Event, SightNo:PerpDistKm) %>%
glimpse()
#> Rows: 22
#> Columns: 58
#> $ Event <chr> "S", "S", "s", "s", "s", "s", "s", "s", "t", "t", "t",...
#> $ SightNo <chr> "1406", "1407", "1407", "1407", "1407", "1407", "1407"...
#> $ Subgroup <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SightNoDaily <chr> "20130113_1", "20130113_2", NA, NA, NA, NA, NA, NA, NA...
#> $ Obs <chr> "208", "125", NA, NA, NA, NA, NA, NA, "280", "149", "2...
#> $ ObsStd <lgl> TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, ...
#> $ Bearing <dbl> 309, 326, 11, 5, 50, 71, 104, 2, 120, 270, 300, 270, 4...
#> $ Reticle <dbl> 2.8, 0.4, 2.0, 3.5, NA, 4.5, 4.5, 2.2, NA, NA, NA, 14....
#> $ DistNm <dbl> 1.06, 2.97, 1.30, 0.90, 0.50, 0.70, 0.70, 1.30, 0.03, ...
#> $ Cue <dbl> 3, 3, NA, NA, NA, NA, NA, NA, NA, NA, NA, 3, NA, 3, NA...
#> $ Method <dbl> 4, 4, NA, NA, NA, NA, NA, NA, NA, NA, NA, 4, NA, 4, NA...
#> $ Photos <chr> "N", "Y", NA, NA, NA, NA, NA, NA, NA, NA, NA, "N", NA,...
#> $ Birds <chr> "N", "N", NA, NA, NA, NA, NA, NA, NA, NA, NA, "N", NA,...
#> $ CalibSchool <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ PhotosAerial <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ Biopsy <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ Prob <lgl> FALSE, FALSE, NA, NA, NA, NA, NA, NA, NA, NA, NA, FALS...
#> $ nSp <int> 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, 1, NA...
#> $ Mixed <lgl> FALSE, FALSE, NA, NA, NA, NA, NA, NA, NA, NA, NA, FALS...
#> $ ObsEstimate <list> [<"280", "001", "208">, <"280", "001", "125">, NULL, ...
#> $ SpCode1 <chr> "018", "076", NA, NA, NA, NA, NA, NA, NA, NA, NA, "037...
#> $ SpCode2 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpCode3 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpCode4 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpCodeProb1 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpCodeProb2 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpCodeProb3 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpCodeProb4 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpPerc1 <dbl> 100, 100, NA, NA, NA, NA, NA, NA, NA, NA, NA, 100, NA,...
#> $ SpPerc2 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpPerc3 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpPerc4 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ GsSchoolBest <dbl> NA, 8.00000, NA, NA, NA, NA, NA, NA, NA, NA, NA, 10.66...
#> $ GsSchoolHigh <dbl> NA, 14.00, NA, NA, NA, NA, NA, NA, NA, NA, NA, 20.00, ...
#> $ GsSchoolLow <dbl> 42.333333, 5.666667, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ GsSpBest1 <dbl> NA, 8.00000, NA, NA, NA, NA, NA, NA, NA, NA, NA, 10.66...
#> $ GsSpBest2 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ GsSpBest3 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ GsSpBest4 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ GsSpHigh1 <dbl> NA, 14.000, NA, NA, NA, NA, NA, NA, NA, NA, NA, 20.000...
#> $ GsSpHigh2 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ GsSpHigh3 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ GsSpHigh4 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ GsSpLow1 <dbl> 42.333333, 5.666667, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ GsSpLow2 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ GsSpLow3 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ GsSpLow4 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ CourseSchool <dbl> NA, NA, NA, NA, NA, 100, 100, NA, NA, NA, NA, NA, NA, ...
#> $ TurtleSp <chr> NA, NA, NA, NA, NA, NA, NA, NA, "LV", "DC", "DC", NA, ...
#> $ TurtleGs <dbl> NA, NA, NA, NA, NA, NA, NA, NA, 1, 2, 1, NA, 1, NA, NA...
#> $ TurtleJFR <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ TurtleAge <chr> NA, NA, NA, NA, NA, NA, NA, NA, "A", "A", "J", NA, "A"...
#> $ TurtleCapt <chr> NA, NA, NA, NA, NA, NA, NA, NA, "N", "N", "N", NA, NA,...
#> $ PinnipedSp <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ PinnipedGs <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ BoatType <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ BoatGs <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ PerpDistKm <dbl> 1.525631e+00, 3.075807e+00, 4.593917e-01, 1.452712e-01...
y.sight.complete <- das_sight(y.proc, return.format = "complete")
y.sight.complete %>%
select(Event, SightNo:PerpDistKm) %>%
glimpse()
#> Rows: 37
#> Columns: 46
#> $ Event <chr> "S", "S", "S", "S", "S", "S", "s", "s", "s", "s", "s",...
#> $ SightNo <chr> "1406", "1406", "1406", "1407", "1407", "1407", "1407"...
#> $ Subgroup <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SightNoDaily <chr> "20130113_1", "20130113_1", "20130113_1", "20130113_2"...
#> $ Obs <chr> "208", "208", "208", "125", "125", "125", NA, NA, NA, ...
#> $ ObsStd <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALS...
#> $ Bearing <dbl> 309, 309, 309, 326, 326, 326, 11, 5, 50, 71, 104, 2, 1...
#> $ Reticle <dbl> 2.8, 2.8, 2.8, 0.4, 0.4, 0.4, 2.0, 3.5, NA, 4.5, 4.5, ...
#> $ DistNm <dbl> 1.06, 1.06, 1.06, 2.97, 2.97, 2.97, 1.30, 0.90, 0.50, ...
#> $ Cue <dbl> 3, 3, 3, 3, 3, 3, NA, NA, NA, NA, NA, NA, NA, NA, NA, ...
#> $ Method <dbl> 4, 4, 4, 4, 4, 4, NA, NA, NA, NA, NA, NA, NA, NA, NA, ...
#> $ Photos <chr> "N", "N", "N", "Y", "Y", "Y", NA, NA, NA, NA, NA, NA, ...
#> $ Birds <chr> "N", "N", "N", "N", "N", "N", NA, NA, NA, NA, NA, NA, ...
#> $ CalibSchool <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ PhotosAerial <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ Biopsy <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ Prob <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NA, NA, NA, ...
#> $ nSp <int> 1, 1, 1, 1, 1, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, ...
#> $ Mixed <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, NA, NA, NA, ...
#> $ ObsEstimate <chr> "280", "001", "208", "280", "001", "125", NA, NA, NA, ...
#> $ SpCode1 <chr> "018", "018", "018", "076", "076", "076", NA, NA, NA, ...
#> $ SpCode2 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpCode3 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpCode4 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpCodeProb1 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpCodeProb2 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpCodeProb3 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpCodeProb4 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpPerc1 <dbl> 100, 100, 100, 100, 100, 100, NA, NA, NA, NA, NA, NA, ...
#> $ SpPerc2 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpPerc3 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ SpPerc4 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ GsSchoolBest <dbl> NA, NA, NA, 6, 9, 9, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ GsSchoolHigh <dbl> NA, NA, NA, 10, 10, 22, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ GsSchoolLow <dbl> 43, 36, 48, 6, 2, 9, NA, NA, NA, NA, NA, NA, NA, NA, N...
#> $ CourseSchool <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, 100, 100, NA, NA, ...
#> $ TurtleSp <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "LV", ...
#> $ TurtleGs <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, 2, ...
#> $ TurtleJFR <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ TurtleAge <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "A", "...
#> $ TurtleCapt <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "N", "...
#> $ PinnipedSp <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ PinnipedGs <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ BoatType <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ BoatGs <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
#> $ PerpDistKm <dbl> 1.52563078, 1.52563078, 1.52563078, 3.07580701, 3.0758...
You can also easily filter or subset the sighting data for the desired event code(s)
In addition, you can chop the effort data into segments, and summarize the conditions and sightings on those segments using das_effort
and das_effort_sight
. These effort segments can be used for line transect estimates using the Distance software, species distribution modeling, or summarizing the number of sightings of certain species on each segment, among other uses. das_effort
chops continuous effort sections (the event sequence from R to E events) into effort segments using one of several different chopping methods: condition (a new effort segment every time a condition changes), equal length (effort segments of equal length), or section (each segment is a full continuous effort section, i.e. it runs from an R event to an E event). das_effort_sight
takes the output of das_effort
and returns the number of included sightings and animals per segment for specified species codes.
Both functions return a list of three data frames: segdata, sightinfo, and randpicks. These data frames and the different chopping methodologies are described in depth in the function documentation (?das_effort
and ?das_effort_sight
), but briefly segdata contains information about each effort segment, sightinfo contains information about the sightings such as their corresponding segment, and randpicks contains information specific to the ‘equal length’ chopping method. das_effort
and das_effort_sight
are separate functions to allow the user more control over which sightings should be included in the effort segment summaries (see ?das_effort
).
# Chop the effort into 10km segments
y.eff <- das_effort(
y.proc, method = "equallength", seg.km = 10, dist.method = "greatcircle",
num.cores = 1
)
#> No argument was passed via randpicks.load, and thus new randpicks values will be generated
# Chop the effort every time a condition changes
y.eff <- das_effort(
y.proc, method = "condition", seg.min.km = 0,
dist.method = "greatcircle", conditions = c("Bft", "SwellHght", "Vis"),
num.cores = 1
)
y.eff.sight <- das_effort_sight(y.eff, sp.codes = c("018", "076"))
glimpse(y.eff.sight$segdata)
#> Rows: 20
#> Columns: 29
#> $ segnum <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,...
#> $ section_id <int> 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 6, 6, 7, 7,...
#> $ section_sub_id <dbl> 1, 1, 2, 1, 2, 3, 4, 5, 6, 7, 1, 2, 1, 1, 2, 1, 2,...
#> $ file <chr> "das_sample.das", "das_sample.das", "das_sample.da...
#> $ stlin <int> 2, 23, 33, 59, 69, 70, 75, 78, 84, 85, 99, 108, 12...
#> $ endlin <int> 20, 33, 43, 69, 70, 75, 78, 84, 85, 90, 108, 121, ...
#> $ lat1 <dbl> 39.32033, 39.37617, 39.42950, 39.56800, 39.66082, ...
#> $ lon1 <dbl> -137.6043, -137.5978, -137.5715, -137.4530, -137.4...
#> $ lat2 <dbl> 39.36716, 39.42950, 39.51933, 39.66082, 39.66133, ...
#> $ lon2 <dbl> -137.5817, -137.5715, -137.5277, -137.4132, -137.4...
#> $ mlat <dbl> 39.34377, 39.40288, 39.47435, 39.61433, 39.66108, ...
#> $ mlon <dbl> -137.5930, -137.5848, -137.5493, -137.4327, -137.4...
#> $ dist <dbl> 5.5577, 6.3431, 10.6674, 10.8651, 0.0574, 1.4189, ...
#> $ mDateTime <dttm> 2013-01-13 06:37:02, 2013-01-13 07:09:03, 2013-01...
#> $ year <dbl> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 20...
#> $ month <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,...
#> $ day <int> 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13...
#> $ mtime <chr> "06:37:02", "07:09:03", "07:38:33", "09:40:55", "0...
#> $ Cruise <dbl> 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 10...
#> $ Mode <chr> "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", ...
#> $ EffType <chr> "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", ...
#> $ ESWsides <dbl> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,...
#> $ maxdistBft <dbl> 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 3, 2,...
#> $ maxdistSwellHght <dbl> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,...
#> $ maxdistVis <dbl> 6.0, 6.0, 5.5, 5.5, 6.0, 6.0, 5.5, 4.5, 3.5, 2.5, ...
#> $ nSI_018 <dbl> 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...
#> $ ANI_018 <dbl> 42.33333, 0.00000, 0.00000, 0.00000, 0.00000, 0.00...
#> $ nSI_076 <dbl> 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...
#> $ ANI_076 <dbl> 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...
glimpse(y.eff.sight$sightinfo)
#> Rows: 13
#> Columns: 63
#> $ segnum <int> 1, 3, 4, 13, 13, 15, 17, 18, 18, 20, 20, 20, 20
#> $ mlat <dbl> 39.34377, 39.47435, 39.61433, 40.20895, 40.20895, 40.3...
#> $ mlon <dbl> -137.5930, -137.5493, -137.4327, -137.1531, -137.1531,...
#> $ Event <chr> "S", "S", "t", "t", "S", "t", "S", "S", "S", "S", "S",...
#> $ DateTime <dttm> 2013-01-13 06:46:02, 2013-01-13 07:56:22, 2013-01-13 ...
#> $ year <dbl> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, ...
#> $ Lat <dbl> 39.36617, 39.51767, 39.59733, 40.18283, 40.26567, 40.3...
#> $ Lon <dbl> -137.5820, -137.5285, -137.4400, -137.1622, -137.1350,...
#> $ OnEffort <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, ...
#> $ Cruise <dbl> 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, ...
#> $ Mode <chr> "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C",...
#> $ EffType <chr> "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S",...
#> $ ESWsides <dbl> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
#> $ Course <dbl> 25, 26, 27, 20, 20, 16, 25, 30, 30, 23, 23, 23, 23
#> $ SpdKt <dbl> 10.2, 9.7, 9.0, 9.3, 9.3, 8.9, 8.9, 9.5, 9.5, 9.6, 9.6...
#> $ Bft <dbl> 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2
#> $ SwellHght <dbl> 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1
#> $ WindSpdKt <dbl> 10, 10, 10, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5
#> $ RainFog <dbl> 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3
#> $ HorizSun <dbl> NA, 2, 2, 8, 8, 9, 8, 8, 8, NA, NA, NA, NA
#> $ VertSun <dbl> NA, 2, 2, 1, 1, 1, 2, 2, 2, NA, NA, NA, NA
#> $ Glare <lgl> NA, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, F...
#> $ Vis <dbl> 6.0, 5.5, 5.5, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 4.0, 4.0,...
#> $ ObsL <chr> "208", "125", "001", "280", "280", "125", "149", "126"...
#> $ Rec <chr> "280", "208", "126", "001", "001", "208", "125", "149"...
#> $ ObsR <chr> "001", "280", "149", "126", "126", "280", "208", "125"...
#> $ ObsInd <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
#> $ EffortDot <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, ...
#> $ EventNum <chr> "15", "35", "59", "131", "136", "153", "167", "181", "...
#> $ file_das <chr> "das_sample.das", "das_sample.das", "das_sample.das", ...
#> $ line_num <int> 15, 38, 65, 137, 142, 162, 176, 193, 193, 248, 248, 25...
#> $ SightNo <chr> "1406", "1407", NA, NA, "1408", NA, "1409", "1410", "1...
#> $ Subgroup <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
#> $ SightNoDaily <chr> "20130113_1", "20130113_2", NA, NA, "20130113_3", NA, ...
#> $ Obs <chr> "208", "125", "280", "228", "280", "231", "149", "125"...
#> $ ObsStd <lgl> TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRU...
#> $ Bearing <dbl> 309, 326, 120, 300, 270, 45, 344, 70, 70, 359, 359, 38...
#> $ Reticle <dbl> 2.8, 0.4, NA, NA, 14.0, NA, 0.2, 1.4, 1.4, 0.3, 0.3, 0...
#> $ DistNm <dbl> 1.06, 2.97, 0.03, 0.02, 0.28, 0.05, 3.68, 1.66, 1.66, ...
#> $ Cue <dbl> 3, 3, NA, NA, 3, NA, 3, 3, 3, 2, 2, 3, 3
#> $ Method <dbl> 4, 4, NA, NA, 4, NA, 4, 4, 4, 4, 4, 4, 4
#> $ Photos <chr> "N", "Y", NA, NA, "N", NA, "Y", "Y", "Y", "Y", "Y", "Y...
#> $ Birds <chr> "N", "N", NA, NA, "N", NA, "Y", "N", "N", "N", "N", "N...
#> $ CalibSchool <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
#> $ PhotosAerial <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
#> $ Biopsy <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
#> $ Prob <lgl> FALSE, FALSE, NA, NA, FALSE, NA, FALSE, FALSE, FALSE, ...
#> $ nSp <int> 1, 1, NA, NA, 1, NA, 1, 2, 2, 2, 2, 2, 2
#> $ Mixed <lgl> FALSE, FALSE, NA, NA, FALSE, NA, FALSE, TRUE, TRUE, TR...
#> $ SpCode <chr> "018", "076", "LV", "DC", "037", "DC", "016", "013", "...
#> $ SpCodeProb <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "016", "016"
#> $ GsSchoolBest <dbl> NA, 8.00000, 1.00000, 1.00000, 10.66667, 1.00000, 46.6...
#> $ GsSchoolHigh <dbl> NA, 14.00, NA, NA, 20.00, NA, 79.00, 72.75, 72.75, 249...
#> $ GsSchoolLow <dbl> 42.333333, 5.666667, NA, NA, 10.666667, NA, 46.666667,...
#> $ GsSpBest <dbl> NA, 8.00000, 1.00000, 1.00000, 10.66667, 1.00000, 46.6...
#> $ GsSpHigh <dbl> NA, 14.000, NA, NA, 20.000, NA, 79.000, 53.165, 19.585...
#> $ GsSpLow <dbl> 42.333333, 5.666667, NA, NA, 10.666667, NA, 46.666667,...
#> $ CourseSchool <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
#> $ TurtleJFR <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA
#> $ TurtleAge <chr> NA, NA, "A", "J", NA, "A", NA, NA, NA, NA, NA, NA, NA
#> $ TurtleCapt <chr> NA, NA, "N", "N", NA, NA, NA, NA, NA, NA, NA, NA, NA
#> $ PerpDistKm <dbl> 1.52563078, 3.07580701, 0.04811637, 0.03207758, 0.5185...
#> $ included <lgl> TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, ...
This package contains the function das_intersects_strata
, which allows you to add columns to data frames indicating if a point intersects one or more strata polygons. You can pass this function either a data frame or a list. A list must be the output of das_effort
or das_effort_sight
, and the function will use the segment midpoints to determine if a segment (and associated sighting) intersected each stratum. There currently is no functionality for chopping effort lines by stratum.
stratum.file <- system.file("das_sample_stratum.csv", package = "swfscDAS")
y.eff.sight.strata <- das_intersects_strata(y.eff.sight, list(InPoly = stratum.file))
#> although coordinates are longitude/latitude, st_intersects assumes that they are planar
#> although coordinates are longitude/latitude, st_intersects assumes that they are planar
glimpse(y.eff.sight.strata$segdata)
#> Rows: 20
#> Columns: 30
#> $ segnum <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,...
#> $ section_id <int> 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 6, 6, 7, 7,...
#> $ section_sub_id <dbl> 1, 1, 2, 1, 2, 3, 4, 5, 6, 7, 1, 2, 1, 1, 2, 1, 2,...
#> $ file <chr> "das_sample.das", "das_sample.das", "das_sample.da...
#> $ stlin <int> 2, 23, 33, 59, 69, 70, 75, 78, 84, 85, 99, 108, 12...
#> $ endlin <int> 20, 33, 43, 69, 70, 75, 78, 84, 85, 90, 108, 121, ...
#> $ lat1 <dbl> 39.32033, 39.37617, 39.42950, 39.56800, 39.66082, ...
#> $ lon1 <dbl> -137.6043, -137.5978, -137.5715, -137.4530, -137.4...
#> $ lat2 <dbl> 39.36716, 39.42950, 39.51933, 39.66082, 39.66133, ...
#> $ lon2 <dbl> -137.5817, -137.5715, -137.5277, -137.4132, -137.4...
#> $ mlat <dbl> 39.34377, 39.40288, 39.47435, 39.61433, 39.66108, ...
#> $ mlon <dbl> -137.5930, -137.5848, -137.5493, -137.4327, -137.4...
#> $ dist <dbl> 5.5577, 6.3431, 10.6674, 10.8651, 0.0574, 1.4189, ...
#> $ mDateTime <dttm> 2013-01-13 06:37:02, 2013-01-13 07:09:03, 2013-01...
#> $ year <dbl> 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 20...
#> $ month <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,...
#> $ day <int> 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13...
#> $ mtime <chr> "06:37:02", "07:09:03", "07:38:33", "09:40:55", "0...
#> $ Cruise <dbl> 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 10...
#> $ Mode <chr> "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", ...
#> $ EffType <chr> "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", ...
#> $ ESWsides <dbl> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,...
#> $ maxdistBft <dbl> 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3, 2, 3, 2,...
#> $ maxdistSwellHght <dbl> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,...
#> $ maxdistVis <dbl> 6.0, 6.0, 5.5, 5.5, 6.0, 6.0, 5.5, 4.5, 3.5, 2.5, ...
#> $ nSI_018 <dbl> 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...
#> $ ANI_018 <dbl> 42.33333, 0.00000, 0.00000, 0.00000, 0.00000, 0.00...
#> $ nSI_076 <dbl> 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...
#> $ ANI_076 <dbl> 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...
#> $ InPoly <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...
Comments
In addition, you can use
das_comments
to generate comment strings. This is particularly useful if looking for comments with keywords