{"id":25434566,"url":"https://github.com/trackerproject/tracker","last_synced_at":"2026-01-30T10:13:26.400Z","repository":{"id":56936925,"uuid":"44336554","full_name":"trackerproject/trackeR","owner":"trackerproject","description":"Infrastructure for Running, Cycling and Swimming Data from GPS-Enabled Tracking Devices","archived":false,"fork":false,"pushed_at":"2024-01-12T17:13:38.000Z","size":35258,"stargazers_count":90,"open_issues_count":7,"forks_count":7,"subscribers_count":15,"default_branch":"master","last_synced_at":"2024-10-25T00:34:32.383Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://cran.r-project.org/package=trackeR","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trackerproject.png","metadata":{"files":{"readme":"README.Rmd","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2015-10-15T18:16:52.000Z","updated_at":"2024-10-22T10:50:46.000Z","dependencies_parsed_at":"2024-01-12T22:40:49.635Z","dependency_job_id":null,"html_url":"https://github.com/trackerproject/trackeR","commit_stats":{"total_commits":607,"total_committers":10,"mean_commits":60.7,"dds":0.4250411861614497,"last_synced_commit":"8111b168d66e16bf7507b98f2cc14f19249f36b9"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trackerproject%2FtrackeR","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trackerproject%2FtrackeR/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trackerproject%2FtrackeR/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trackerproject%2FtrackeR/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trackerproject","download_url":"https://codeload.github.com/trackerproject/trackeR/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239242106,"owners_count":19605954,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-17T06:17:50.090Z","updated_at":"2026-01-30T10:13:26.388Z","avatar_url":"https://github.com/trackerproject.png","language":"HTML","readme":"---\noutput: github_document\n---\n\n# trackeR \u003cimg src=\"README_files/hex_trackeR.svg\" width=\"320\" align=\"right\"\u003e\n\n[![CRAN_Status_Badge](http://www.r-pkg.org/badges/version/trackeR)](https://cran.r-project.org/package=trackeR)\n[![Coverage Status](https://coveralls.io/repos/github/trackerproject/trackeR/badge.svg?branch=master)](https://coveralls.io/github/trackerproject/trackeR?branch=master)\n[![R-CMD-check](https://github.com/trackerproject/trackeR/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/trackerproject/trackeR/actions/workflows/R-CMD-check.yaml)\n[![Licence](https://img.shields.io/badge/licence-GPL--3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0.en.html)\n\n\n### Description\n\nThe purpose of this package is to provide infrastructure for handling\nrunning, cycling, and swimming data from GPS-enabled tracking devices.\n\nThe formats that are currently supported for the training activity\nfiles are .tcx (Training Center XML), Strava .gpx, .db3 and [Golden\nCheetah](http://goldencheetah.org) .json files. After extraction and\nappropriate manipulation of the training or competition attributes,\nthe data are placed into session-based and unit-aware data objects of\nclass trackeRdata (S3 class). The information in the resultant data\nobjects can then be visualised, summarised, and analysed through\ncorresponding flexible and extensible methods.\n\n### Current capabilities\n\nRead:\n\n- Read data from .tcx, Strava .gpx, .db3 or [Golden Cheetah](http://goldencheetah.org) .json files.\n- Read all supported files in a specified directory.\n\nSports supported:\n\n- Running\n- Cycling\n- Swimming\n\nData processing:\n\n- Automatically identify sessions from timestamps.\n- Imputation of data to characterise times when the device is paused or remains stationary.\n- Correction of GPS-measured distances using elevation data.\n- Basic data cleaning capabilities e.g., no negative speeds or distances.\n- Specify and conveniently change units of measurement.\n- Organise data into session-based and unit-aware data objects of class trackeRdata.\n\nAnalysis:\n\n- Session summaries: distance, duration, time moving, average speed/pace/heart\nrate/cadence/power (overall and moving), work to rest ratio, temperature.\n- Time spent exercising in user-supplied zones, e.g., heart rate zones or speed zones.\n- Work capacity above critical power (W', W prime)\n- Distribution profiles: time spent exercising above thresholds of training attributes.\n- Concentration profiles: negative derivatives of distribution profiles.\n- Functional principal components analysis of distribution and concentration profiles.\n\nVisualisation:\n\n- Plot session progression in, e.g., pace, heart rate, etc.\n- Plot route covered during session on static and interactive maps from various providers.\n- Plot session summary statistics.\n- Plot date time of sessions in timeline plots.\n- Plot time spent exercising in zones.\n- Plot distribution/concentration profiles.\n- Plot principal components of distribution/concentration profiles.\n- Ridgeline (or joy) plots for distribution/concentration profiles.\n\n### Installation\n\nInstall the released version from CRAN:\n\n```{r, eval = FALSE}\ninstall.packages(\"trackeR\")\n```\n\nOr the development version from github:\n\n```{r, eval = FALSE}\n# install.packages(\"devtools\")\ndevtools::install_github(\"trackerproject/trackeR\")\n```\n\n\n### Example\n\nPlot workout data\n```{r, plots, message = FALSE, fig.height = 6.5}\ndata(runs, package = \"trackeR\")\nplot(runs, session = 1:5, what = c(\"speed\", \"pace\", \"altitude\"))\n```\n\nChange the units\n```{r, plots_new, message = FALSE, fig.height = 6.5}\ndata(runs, package = \"trackeR\")\nruns0 \u003c- change_units(runs,\n                      variable = c(\"speed\", \"altitude\"),\n                      unit = c(\"km_per_h\", \"ft\"),\n                      sport = c(\"running\", \"running\"))\nplot(runs0, session = 1:5, what = c(\"speed\", \"pace\", \"altitude\"))\n```\n\nSummarise sessions\n```{r, summary, message = FALSE, fig.height = 6.5}\nlibrary(\"trackeR\")\nruns_summary \u003c- summary(runs)\nplot(runs_summary, group = c(\"total\", \"moving\"),\n    what = c(\"avgSpeed\", \"distance\", \"duration\", \"avgHeartRate\"))\n```\n\nGenerate distribution and concentration profiles\n\n```{r, cprofile, fig.width = 9}\nrunsT \u003c- threshold(runs)\ndp_runs \u003c- distribution_profile(runsT, what = c(\"speed\", \"heart_rate\"))\ndp_runs_smooth \u003c- smoother(dp_runs)\ncp_runs \u003c- concentration_profile(dp_runs_smooth)\nplot(cp_runs, multiple = TRUE, smooth = FALSE)\n```\n\nA ridgeline plot of the concentration profiles\n```{r, cprofile-ridges, warning = FALSE, fig.width = 9}\nridges(cp_runs, what = \"speed\")\n```\n\n```{r, cprofile-ridges-hr, warning = FALSE, fig.width = 9}\nridges(cp_runs, what = \"heart_rate\")\n```\n\nExplore concentration profiles for speed, e.g., via functional principal\ncomponents analysis (PCA)\n\n```{r, funPCA, fig.width = 7, fig.height = 7}\n## fit functional PCA\ncp_PCA \u003c- funPCA(cp_runs, what = \"speed\", nharm = 4)\n\n## pick first 2 harmonics/principal components\nround(cp_PCA$varprop, 2)\n\n## plot harmonics\nplot(cp_PCA, harm = 1:2)\n```\n\n```{r, scores}\n## plot scores vs summary statistics\nscores_SP \u003c- data.frame(cp_PCA$scores)\nnames(scores_SP) \u003c- paste0(\"speed_pc\", 1:4)\nd \u003c- cbind(runs_summary, scores_SP)\n\nlibrary(\"ggplot2\")\n## pc1 ~ session duration (moving)\nggplot(d) + geom_point(aes(x = as.numeric(durationMoving), y = speed_pc1)) + theme_bw()\n## pc2 ~ avg speed (moving)\nggplot(d) + geom_point(aes(x = avgSpeedMoving, y = speed_pc2)) + theme_bw()\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrackerproject%2Ftracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrackerproject%2Ftracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrackerproject%2Ftracker/lists"}