110 lines
3.1 KiB
R
110 lines
3.1 KiB
R
|
|
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))
|