Dear KoBo and R users,
Happy new year! I wanted to share with you a work-in-progress R package to access KoBoToolbox using v2 API: robotoolbox
I would be grateful if you can give it a try and provide feedbacks on how to improve it, particularly if something is not working as expected.
I didn’t implement unit tests yet and some features might not be available if you have a project with multiple form versions where questions and/org group names changed during the course of the project.
The main function of robotoolbox
is kobo_data
or kobo_submissions
(alias) and to get the data you need to setup your account and the use your asset uid to read the data.
You’ll need to install this package using the remotes
R package
## install.packages("remotes")
remotes::install_gitlab("dickoa/robotoolbox")
The first step is to get your API token
using the kobo_token
function.
library(robotoolbox)
token <- kobo_token(username = "cool_user_name", password = "myP@$$Word",
url = "https://{kpi-url}/")
With the token (that you can also get from your account) you can now setup the robotoolbox
package.
kobo_setup(url = "https://{kpi-url}", token = token)
kobo_settings() ## just to check
## <robotoolbox settings>
## KoBoToolbox URL: https://{kpi-url}/
## KoBoToolbox API Token: xxxxxxxxxxxxxxxxxxxxxxxxxx
Now you can access all your projects and read the data from the project you picked. You can list project using kobo_asset_list()
.
library(dplyr)
l <- kobo_asset_list()
glimpse(l) # l is a data.frame with as many rows as projects
## $ uid <chr> "b9kgvd7AXQCmo5qyUOBEl", "aRfJMpTSGRLzZ…"
## $ name <chr> "Proj_A1", "Proj_A2", "Proj_A3", "Proj_A…"
## $ asset_type <chr> "survey", "survey", "survey", "survey", …
## $ owner_username <chr> "xxxxxxxxxxxxxx", "xxxxxxxxxxxxxxx", "xx…"
## $ date_created <dttm> 2020-04-27 20:34:23, 2020-04-27 21:21:1…
## $ date_modified <dttm> 2021-06-17 01:52:57, 2021-06-17 01:52:5…
## $ submissions <int> 2951, 2679, 2, 1, 0, 0, 287, 73, 0, 274,…
Let’s pick the first project and load it
uid <- l$uid[1]
asset <- kobo_asset(uid)
asset
## <robotoolbox asset> b9agvd9AXQCmo5qyUOBEl
## Asset Name: proj_A1
## Asset Type: survey
## Created: 2021-05-10 07:47:53
## Last modified: 2021-08-16 12:35:50
## Submissions: 941
With the asset you can now read your data
data <- kobo_data(asset)
glimpse(data)
## Rows: 941
## Columns: 17
## $ id <int> …
## $ start <dttm> …
## $ end <dttm> …
## $ today <date> …
## $ deviceid <chr> …
## $ test <chr+lbl> …
## $ round <date> …
## $ effective_date <date> …
## $ collect_type <chr+lbl> …
## $ covid_module <chr+lbl> …
## $ country <chr+lbl> …
## $ interviewer_id <chr> …
## $ respondent_is_major <chr+lbl> …
## $ consent <chr+lbl> …
## $ admin_level_1 <chr+lbl> …
## $ admin_level_2 <chr+lbl> …
## $ admin_level_3 <chr+lbl> …
This package relies on the R package labelled
to read labels into R. You can learn more here
Another feature, is the use of dm
to handle repeating groups. More info in this vignette:
Still working on both the package and its documentation and again would love hear from you.
Best,
Ahmadou