Skip to contents

Converts a list of REDCap data frames from long to wide format. Handles longitudinal projects, but not yet repeated instruments.

Usage

redcap_wider(
  data,
  event.glue = "{.value}_{redcap_event_name}",
  inst.glue = "{.value}_{redcap_repeat_instance}"
)

Arguments

data

A list of data frames.

event.glue

A dplyr::glue string for repeated events naming

inst.glue

A dplyr::glue string for repeated instruments naming

Value

The list of data frames in wide format.

Examples

# Longitudinal
list1 <- list(data.frame(record_id = c(1,2,1,2),
redcap_event_name = c("baseline", "baseline", "followup", "followup"),
age = c(25,26,27,28)),
data.frame(record_id = c(1,2),
redcap_event_name = c("baseline", "baseline"),
gender = c("male", "female")))
redcap_wider(list1)
#> Joining with `by = join_by(record_id)`
#>   record_id age_baseline age_followup gender
#> 1         1           25           27   male
#> 2         2           26           28 female
# Simpel with two instruments
list2 <- list(data.frame(record_id = c(1,2),
age = c(25,26)),
data.frame(record_id = c(1,2),
gender = c("male", "female")))
redcap_wider(list2)
#> Joining with `by = join_by(record_id)`
#>   record_id age gender
#> 1         1  25   male
#> 2         2  26 female
# Simple with single instrument
list3 <- list(data.frame(record_id = c(1,2),
age = c(25,26)))
redcap_wider(list3)
#>   record_id age
#> 1         1  25
#> 2         2  26
# Longitudinal with repeatable instruments
list4 <- list(data.frame(record_id = c(1,2,1,2),
redcap_event_name = c("baseline", "baseline", "followup", "followup"),
age = c(25,26,27,28)),
data.frame(record_id = c(1,1,1,1,2,2,2,2),
redcap_event_name = c("baseline", "baseline", "followup", "followup",
"baseline", "baseline", "followup", "followup"),
redcap_repeat_instrument = "walk",
redcap_repeat_instance=c(1,2,1,2,1,2,1,2),
dist = c(40, 32, 25, 33, 28, 24, 23, 36)),
data.frame(record_id = c(1,2),
redcap_event_name = c("baseline", "baseline"),
gender = c("male", "female")))
redcap_wider(list4)
#> Joining with `by = join_by(record_id)`
#> Joining with `by = join_by(record_id)`
#>   record_id age_baseline age_followup dist_1_baseline dist_1_followup
#> 1         1           25           27              40              25
#> 2         2           26           28              28              23
#>   dist_2_baseline dist_2_followup gender
#> 1              32              33   male
#> 2              24              36 female