REDCap Data
We use the API to download redcap data to csv and RData files that can easily be ingested by other scripts.
This is done automatically by Cron on Rhea (linux server) (as foranw@rhea
)
/Volumes/Hera/Projects/Habit/behave/redcap/00_get.R
→data/habit_redcap.csv
:/Volumes/Hera/Projects/SPA/scripts/redcap/00_get.R
→spa_redcap.RData
Data Shape
As exported, data is in “fake wide” format. Rows are repeated by event (`behave`,`mr`,`behave_2`, `mr_2`, etc) but columns exist for all field labels for all events.
For instance, recuit_age
is only presented during recruit
, so it is NA
for all other redcap_event_name
s
record_id | redcap_event_name | recruit_age | enroll_date | demo_age | ptx_mp2rage_onset |
---|---|---|---|---|---|
11751 | recruit_arm_1 | 23 | |||
11751 | screener_arm_1 | ||||
11751 | behavioral_arm_1 | 2023-12-06 | |||
11751 | mr_arm_1 | 2023-12-08 09:06:00 |
To make truly wide, subset columns for each event name of interest and merge back. Example pulled from /Volumes/Hera/Projects/SPA/scripts/redcap/age_visit_histogram.R
# remove '_arm_1' parse visit number from event name rm_arm <- function(d) d |> mutate(redcap_event_name=gsub('_arm_1','',redcap_event_name), visitno=str_extract(redcap_event_name, '[0-9]$'), visitno=ifelse(is.na(visitno), 1, visitno)) d.behave <- lunas |> select(luna=record_id, redcap_event_name, age=demo_age, behave=behave_starttime) |> filter(!is.na(behave)) |> rm_arm() d.mri <- lunas |> select(luna=record_id, redcap_event_name, ptx=ptx_mp2rage_onset)|> filter(!is.na(ptx)) |> rm_arm() d_wide <- left_join(d.behave, d.mri, by=c("luna","visitno")) d_wide |> rename_with(\(x) gsub('redcap_event_name','name', x)) |> filter(luna %in% c(11751,11823))
luna | name.x | age | behave | visitno | name.y | ptx |
---|---|---|---|---|---|---|
11751 | behavioral | 2023-12-06 08:21:39 | 1 | mr | 2023-12-08 09:06:00 | |
11823 | behavioral | 13 | 2024-08-09 14:51:18 | 1 |