Typeform is a company that specializes in online form building. This R package allows users to download their form results through the exposed API (V2).
** The rtypeform
package now uses V2. This is a breaking change from the previous version.**
The package can be installed from CRAN
and loaded in the usual way.
library("rtypeform")
#> This package now uses V2 of the typeform API.This update breaks ALL code (sorry, not my fault).The README provides some guidence on using the new functions.You will need to generate a new API. See the README for details.
To use this package you need a V2 API key. It is fairly easy to obtain one. See typeform’s help page. The token will look something like
943af478d3ff3d4d760020c11af102b79c440513
Whenever the package refers to api
, this is the object it needs.
Once you have this key, we can extract data from typeform
The forms object is also contains attributes containing the total number of forms.
If you don’t pass your api
key as an argument, it will attempt to read the variable typeform_api2
from your .Renviron
file, via Sys.getenv("typeform_api2")
. If this variable is set correctly, then you can omit the api
argument
In all function calls below, the api
argument can be omitted if the environment variable is set (see Efficient R programming Chapter 2 for more details).
You can download data from a particular typeform via
The object q
is a list. The first element is meta
that contain details on the user, such as, their platform
and user_agent
. The other list elements are responses to each question.
There are a number of options for downloading the data. For example
See the ?get_responses()
help page for other options.
Since the responses is list, we get to perform lots of map operations. I find using purrr
and the tidyverse
make this a bit easier. To see the question types we can use string a few map()
commands together
library("tidyverse")
question_types = q[-1] %>% # Remove the meta
map(~select(.x, type)) %>%
map_df(~slice(.x, 1)) %>%
pull()
Imagine we only want:
completed = TRUE
.page_size = 5
.2018-01-01 11:00:00
.since = "2018-01-01 11:00:00"
# convert to date-time
since = lubridate::ymd_hms(since)
q = get_responses(form_id, completed = TRUE,
page_size = 5, since = since)
Development of this package was supported by Jumping Rivers