transfer from old repo
This commit is contained in:
parent
cfa4a5f9cc
commit
277e2b8cf3
1111 changed files with 83736 additions and 0 deletions
110
2 Longterm/data_import_api.R
Normal file
110
2 Longterm/data_import_api.R
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
|
||||
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))
|
||||
Loading…
Reference in a new issue