PAaSO/2 Longterm/data_import_api.R

110 lines
3.1 KiB
R
Raw Normal View History

2026-08-19 09:27:27 +02:00
token=keyring::key_get("TALOS_REDCAP_API")
## Primary data set of recorded data
inst <- REDCapR::redcap_instruments(redcap_uri = "https://redcap.au.dk/api/",token = token)$data
tools <- tolower(c(
"PASE",
"MFI",
"mdi",
"mmse",
"mrs",
"SDMT",
"who",
"ham",
"bi",
"grad",
"nihss"
))
vec_starts_with <- function(d,v){
filt <- paste0("^(", paste(v, collapse="|"), ")")
d[grep(filt,d)]
}
vec_ends_with <- function(d,v){
filt <- paste0("(", paste(v, collapse="|"), ")$")
# sub(paste0(".*?_(",paste(v,collapse = "|"),")$"),"\\1",colnames(d))
d[grep(filt,d)]
}
# vec_starts_with(inst$instrument_name,tools)
data <- REDCapR::redcap_read(redcap_uri = "https://redcap.au.dk/api/",token = token,
forms = vec_starts_with(inst$instrument_name,tools),
fields = "record_id")$data
ds <- data |> select(!ends_with("complete"))
talos2long <- function(ds,exclude=c("talos","record"),instance_vals=c("0","1","2","4"),exclude_col_ends=c("user","lock")){
nms <- unique(do.call(c,lapply(strsplit(colnames(ds),"_"),"[[",1)))
nms <- nms[!nms %in% exclude]
ls <- lapply(seq_along(nms),function(i){
cols <- c("record_id",vec_starts_with(colnames(ds),c(paste0("talos_",nms[i]),nms[i])))
d <- select(ds,all_of(cols))
ends <- unique(do.call(c,lapply(strsplit(colnames(d),"_"),function(i){
i[length(i)]
})))
ins <- colnames(d) %in% vec_ends_with(colnames(d),paste0("_",instance_vals))
ls_ins <- split.default(d[-1],factor(stRoke::str_extract(colnames(d[ins]),paste0("[",paste(instance_vals,collapse=""),"]$"))))
dat <- lapply(seq_along(ls_ins),function(i){
dr <- cbind(d[1],instance=names(ls_ins)[i],ls_ins[[i]])
colnames(dr) <- unique(gsub(pattern = paste0("_[",paste(instance_vals,collapse=""),"]$"),"",colnames(dr)))
dr |> select(record_id,contains("_sys_"),instance,everything())
}) |> bind_rows() |> rename(rnumb=record_id) |> mutate(rnumb=as.character(rnumb))
## Col name ending on 00 is date col of measure in all tools
dat[,vec_ends_with(colnames(dat),"00")] <- as.Date(dat[,vec_ends_with(colnames(dat),"00")])
dat |> select(!ends_with(exclude_col_ends))
})
names(ls) <- nms
ls
}
ls_sel <- data |> select(!ends_with("complete"))|> talos2long()
## Data set of baseline and DAP data
subjects_raw <-
REDCapR::redcap_read(
redcap_uri = "https://redcap.au.dk/api/",
token = token,
forms = vec_starts_with(inst$instrument_name, c("end", "inkl", "reg", "basis")),
fields = "record_id"
)$data
subjects <- subjects_raw |>
select(
record_id,
talos_end00,
talos_end01,
rdate,
rtreat,
cpr,
basis_kon,
starts_with("reg_")
) |> select(!ends_with("complete")) |>
rename(rnumb = record_id,
enddate = talos_end00,
eos_early = talos_end01,
sex=basis_kon) |>
mutate(
enddate = as.Date(enddate),
rdate = as.Date(rdate),
inc_time = as.numeric(difftime(enddate, rdate, units = "days")),
age = stRoke::age_calc(as.Date(stRoke::cpr_dob(cpr,"%Y-%m-%d")),enddate=rdate)
)
# colnames(subjects) <- gsub("^reg_","",colnames(subjects))