R-CMD-check Codecov test coverage

actisensorlog

actisensorlog processes SensorLog and SensorLogger exports. The package focuses on timestamp normalization, distance calculations, duplicate-time checks, and daily summaries.

Core entry points:

Installation

You can install actisensorlog from GitHub with:

# install.packages("remotes")
remotes::install_github("jhuwit/actisensorlog")

Quick Start

library(actisensorlog)

sensorlog <- suppressMessages(
  actiread::acti_read_sensorlog(actiread::acti_example_sensorlog_file())
)

processed_sensorlog <- acti_process_sensorlog(
  sensorlog,
  lat = 39.3,
  lon = -76.6,
  expected_timezone = "America/New_York",
  check_data = FALSE
)

minute_sensorlog <- acti_minute_sensorlog(processed_sensorlog)
summary_sensorlog <- acti_summarize_sensorlog(processed_sensorlog)

The SensorLog example gains distance, distance_traveled, and is_within_home fields:

head(processed_sensorlog)
#> # A tibble: 6 × 19
#>   file  time                index timestamp             lat   lon altitude speed
#>   <chr> <dttm>              <dbl> <dttm>              <dbl> <dbl>    <dbl> <dbl>
#> 1 /var… 2025-03-11 18:44:11     1 2025-03-11 18:44:07  39.3 -76.6     46.3    -1
#> 2 /var… 2025-03-11 18:44:11     2 2025-03-11 18:44:07  39.3 -76.6     46.3    -1
#> 3 /var… 2025-03-11 18:44:11     3 2025-03-11 18:44:07  39.3 -76.6     46.3    -1
#> 4 /var… 2025-03-11 18:44:12     4 2025-03-11 18:44:07  39.3 -76.6     46.3    -1
#> 5 /var… 2025-03-11 18:44:12     5 2025-03-11 18:44:07  39.3 -76.6     46.3    -1
#> 6 /var… 2025-03-11 18:44:12     6 2025-03-11 18:44:07  39.3 -76.6     46.3    -1
#> # ℹ 11 more variables: speed_accuracy <dbl>, accel_X <dbl>, accel_Y <dbl>,
#> #   accel_Z <dbl>, lat_zero <lgl>, lon_zero <lgl>, distance <dbl>,
#> #   is_within_home <lgl>, distance_traveled <dbl>, timezone_estimated <chr>,
#> #   char_time <chr>

The minute-level view fills missing minutes between observations:

head(minute_sensorlog)
#> # A tibble: 6 × 16
#>   time                max_speed   lat   lon speed accel_X accel_Y accel_Z
#>   <dttm>                  <dbl> <dbl> <dbl> <dbl>   <dbl>   <dbl>   <dbl>
#> 1 2025-03-11 18:44:00        -1  39.3 -76.6    -1 -0.0178   0.964  0.0182
#> 2 2025-03-11 18:45:00        -1  39.3 -76.6    -1 -0.0665   1.01   0.0577
#> 3 2025-03-11 18:46:00        -1  39.3 -76.6    -1 -0.0547   1.00   0.0250
#> 4 2025-03-11 18:47:00        -1  39.3 -76.6    -1 -0.0843   1.01   0.0450
#> 5 2025-03-11 18:48:00        -1  39.3 -76.6    -1 -0.0808   1.01   0.0468
#> 6 2025-03-11 18:49:00        -1  39.3 -76.6    -1 -0.0901   1.01   0.0411
#> # ℹ 8 more variables: distance <dbl>, is_within_home <lgl>,
#> #   distance_traveled <dbl>, vm <dbl>, enmo <dbl>, lat_zero <lgl>,
#> #   lon_zero <lgl>, in_sensorlog <lgl>

The daily summary collapses the data to a single row per date:

summary_sensorlog
#> # A tibble: 1 × 11
#>   date       n_minutes_with_distance sum_distance max_distance
#>   <date>                       <int>        <dbl>        <dbl>
#> 1 2025-03-11                      12       10960.         913.
#> # ℹ 7 more variables: n_minutes_with_distance_traveled <int>,
#> #   sum_distance_traveled <dbl>, mean_distance_traveled <dbl>,
#> #   n_distance_traveled <int>, time_within_home <int>, time_outside_home <int>,
#> #   time_missing_home <int>
sensorlogger <- suppressMessages(
  actiread::acti_read_sensorlogger_location(
    actiread::acti_example_sensorlogger_location_file()
  )
)

processed_sensorlogger <- acti_process_sensorlog(
  sensorlogger,
  lat = 39.3,
  lon = -76.6,
  expected_timezone = "America/New_York"
)
#> No duplicate combinations found of: time, seconds_elapsed, altitude, speed_accuracy, bearing_accuracy, lat, altitude_above_mean_sea_level, bearing, horizontal_accuracy, ... and 6 other variables

minute_sensorlogger <- acti_minute_sensorlog(processed_sensorlogger)
summary_sensorlogger <- acti_summarize_sensorlog(processed_sensorlogger)

The packaged SensorLogger location example follows the same flow:

head(processed_sensorlogger)
#> # A tibble: 6 × 21
#>   time                seconds_elapsed altitude speed_accuracy bearing_accuracy
#>   <dttm>                        <dbl>    <dbl>          <dbl>            <dbl>
#> 1 2025-03-11 17:44:51         -6.71       7.37             -1               -1
#> 2 2025-03-11 17:44:58          0.0255     7.37             -1               -1
#> 3 2025-03-11 17:44:58          0.0322     7.37             -1               -1
#> 4 2025-03-11 17:44:58          0.0660     7.37             -1               -1
#> 5 2025-03-11 17:45:03          5.36       7.37             -1               -1
#> 6 2025-03-11 17:45:04          6.05       7.37             -1               -1
#> # ℹ 16 more variables: lat <dbl>, altitude_above_mean_sea_level <dbl>,
#> #   bearing <dbl>, horizontal_accuracy <dbl>, vertical_accuracy <dbl>,
#> #   lon <dbl>, speed <dbl>, lat_zero <lgl>, lon_zero <lgl>, file <chr>,
#> #   cat_type_sensor <chr>, distance <dbl>, is_within_home <lgl>,
#> #   distance_traveled <dbl>, timezone_estimated <chr>, char_time <chr>
head(minute_sensorlogger)
#> # A tibble: 6 × 16
#>   time                max_speed   lat   lon  speed accel_X accel_Y accel_Z
#>   <dttm>                  <dbl> <dbl> <dbl>  <dbl>   <dbl>   <dbl>   <dbl>
#> 1 2025-03-11 17:44:00     -1     39.3 -76.6 -1          NA      NA      NA
#> 2 2025-03-11 17:45:00      3.04  39.3 -76.6  0.265      NA      NA      NA
#> 3 2025-03-11 17:46:00     -1     39.3 -76.6 -1          NA      NA      NA
#> 4 2025-03-11 17:47:00     NA     NA    NA   NA          NA      NA      NA
#> 5 2025-03-11 17:48:00     -1     39.3 -76.6 -1          NA      NA      NA
#> 6 2025-03-11 17:49:00     -1     39.3 -76.6 -1          NA      NA      NA
#> # ℹ 8 more variables: distance <dbl>, is_within_home <lgl>,
#> #   distance_traveled <dbl>, vm <dbl>, enmo <dbl>, lat_zero <lgl>,
#> #   lon_zero <lgl>, in_sensorlog <lgl>
summary_sensorlogger
#> # A tibble: 1 × 11
#>   date       n_minutes_with_distance sum_distance max_distance
#>   <date>                       <int>        <dbl>        <dbl>
#> 1 2025-03-11                      71       64169.         924.
#> # ℹ 7 more variables: n_minutes_with_distance_traveled <int>,
#> #   sum_distance_traveled <dbl>, mean_distance_traveled <dbl>,
#> #   n_distance_traveled <int>, time_within_home <int>, time_outside_home <int>,
#> #   time_missing_home <int>