From dd6565296c9abbf8009a6984e6832af147b319a4 Mon Sep 17 00:00:00 2001 From: riinuots Date: Fri, 15 Sep 2023 16:01:20 +0100 Subject: [PATCH] {} removed, multilevel variables lumped, more numerics grouped --- R/app_ui.R | 2 +- data-raw/appdata.R | 146 ++++++++++++++---- .../rots/gecko_shinyviz.dcf | 6 +- temp_histogram_ggplot.png | Bin 0 -> 24151 bytes temp_matrix_ggplot.png | Bin 0 -> 43708 bytes 5 files changed, 118 insertions(+), 36 deletions(-) create mode 100644 temp_histogram_ggplot.png create mode 100644 temp_matrix_ggplot.png diff --git a/R/app_ui.R b/R/app_ui.R index aa5c561..16967a4 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -18,7 +18,7 @@ app_ui <- function(request) { ), column(8, - p(paste("Preliminary data updated on", format(Sys.time(), format = "%d-%B %Y"))), + p(paste("Preliminary data updated on", updated_date, ":", nrow(appdata), "patient records")), mod_render_barplot_ui("render_barplot_ui_1") ) ) diff --git a/data-raw/appdata.R b/data-raw/appdata.R index 992f6da..175eec4 100644 --- a/data-raw/appdata.R +++ b/data-raw/appdata.R @@ -19,39 +19,103 @@ patient_data_orig %>% ggplot(aes(age_years)) + geom_histogram() +labels_keep = extract_variable_label(patient_data_orig) + appdata = patient_data_orig %>% select(-redcap_data_access_group) %>% - mutate(ALL = factor("ALL")) %>% - mutate(age.groups = case_when(age_years < 18 ~ "Missing", - between(age_years, 18, 30) ~ "18-30", - between(age_years, 31, 50) ~ "31-50", - between(age_years, 51, 70) ~ "51-70", - between(age_years, 71, 120) ~ "71+", - TRUE ~ "Missing") %>% - ff_label("Age"), - admission_prior = parse_number(admission_prior), - admission_prior.groups = case_when(admission_prior == 0 ~ "None", - between(admission_prior, 1, 1) ~ "1", - between(admission_prior, 2, 3) ~ "2-3", - between(admission_prior, 5, 10) ~ "5-10", - between(admission_prior, 11, 10000) ~ "10+", - TRUE ~ "Missing") %>% - fct_relevel("None", "1", "2-3", "5-10", "10+") %>% - ff_label("Prior admissions"), - post30_los.groups = case_when(post30_los == 0 ~ "0", - between(post30_los, 1, 1) ~ "1", - between(post30_los, 2, 3) ~ "2-3", - between(post30_los, 5, 10) ~ "5-10", - between(post30_los, 11, 10000) ~ "10+", - TRUE ~ "Missing") %>% - fct_relevel("0", "1", "2-3", "5-10", "10+") %>% - ff_label("Length of Stay (days)") - ) - -# appdata %>% -# #filter(admission_prior < 10) %>% -# ggplot(aes(post30_los.groups)) + -# geom_bar() + # remove REDCAP internal varnames that are between {op_code}, etc (matrix variables only): + mutate(across(where(is_character), ~str_remove_all(., " \\s*\\{[^\\)]+\\}"))) %>% + # remove HTML tags: + mutate(across(where(is_character), ~str_remove_all(., "|"))) %>% + mutate(ALL = factor("ALL"), .after = 1) %>% + mutate( + # age ---- + age.groups = case_when(age_years < 18 ~ "Missing", + between(age_years, 18, 30) ~ "18-30", + between(age_years, 31, 50) ~ "31-50", + between(age_years, 51, 70) ~ "51-70", + between(age_years, 71, 120) ~ "71+", + TRUE ~ "Missing") %>% + ff_label("Age"), + # n admissions ---- + admission_prior = parse_number(admission_prior), + admission_prior.groups = case_when(admission_prior == 0 ~ "None", + between(admission_prior, 1, 1) ~ "1", + between(admission_prior, 2, 3) ~ "2-3", + between(admission_prior, 5, 10) ~ "5-10", + between(admission_prior, 11, 10000) ~ "10+", + TRUE ~ "Missing") %>% + fct_relevel("None", "1", "2-3", "5-10", "10+") %>% + ff_label("Prior admissions"), + # LOS ---- + post30_los.groups = case_when(post30_los == 0 ~ "0", + between(post30_los, 1, 1) ~ "1", + between(post30_los, 2, 3) ~ "2-3", + between(post30_los, 5, 10) ~ "5-10", + between(post30_los, 11, 10000) ~ "10+", + TRUE ~ "Missing") %>% + fct_relevel("0", "1", "2-3", "5-10", "10+") %>% + ff_label("Length of Stay (days)"), + # symptom onset diagnosis ---- + pre_symp_adm_day = parse_number(pre_symp_adm_day), + pre_symp_adm_day.groups = case_when(pre_symp_adm_day == 0 ~ "0 days", + between(pre_symp_adm_day, 1, 2) ~ "1-2 days", + between(pre_symp_adm_day, 3, 7) ~ "3-7 days", + between(pre_symp_adm_day, 8, 14) ~ "1-2 weeks", + between(pre_symp_adm_day, 15, 28) ~ "2-4 weeks", + between(pre_symp_adm_day, 29, 182) ~ "1-6 months", + between(pre_symp_adm_day, 182, 10000000) ~ "6+ months", + TRUE ~ "Missing") %>% + fct_relevel("0 days", "1-2 days", "3-7 days", "1-2 weeks", "2-4 weeks", "1-6 months", "6+ months") %>% + ff_label("Symptom onset vs diagnosis (days)"), + # diagnosis vs decision to operate ---- + pre_diag_dec_day.groups = case_when(pre_diag_dec_day == 0 ~ "0 days", + between(pre_diag_dec_day, 1, 2) ~ "1-2 days", + between(pre_diag_dec_day, 3, 7) ~ "3-7 days", + between(pre_diag_dec_day, 8, 14) ~ "1-2 weeks", + between(pre_diag_dec_day, 15, 28) ~ "2-4 weeks", + between(pre_diag_dec_day, 29, 182) ~ "1-6 months", + between(pre_diag_dec_day, 182, 10000000) ~ "6+ months", + TRUE ~ "Missing") %>% + fct_relevel("0 days", "1-2 days", "3-7 days", "1-2 weeks", "2-4 weeks", "1-6 months", "6+ months") %>% + ff_label("Diagnosis vs decision to operate (days)"), + # decision to operate vs operation ---- + pre_dec_op_day = parse_number(pre_dec_op_day), + pre_dec_op_day.groups = case_when(pre_dec_op_day == 0 ~ "0 days", + between(pre_dec_op_day, 1, 2) ~ "1-2 days", + between(pre_dec_op_day, 3, 7) ~ "3-7 days", + between(pre_dec_op_day, 8, 14) ~ "1-2 weeks", + between(pre_dec_op_day, 15, 28) ~ "2-4 weeks", + between(pre_dec_op_day, 29, 182) ~ "1-6 months", + between(pre_dec_op_day, 182, 10000000) ~ "6+ months", + TRUE ~ "Missing") %>% + fct_relevel("0 days", "1-2 days", "3-7 days", "1-2 weeks", "2-4 weeks", "1-6 months", "6+ months") %>% + ff_label("Decision to operate vs operation (days)"), + # anaesthetic type ---- + op_anaes.grouped = op_anaes %>% + str_replace("Total Intravenous Volatile Anaesthetic \\(TIVA\\)", "TIVA") %>% + str_remove(" \\(e.g., midazolam\\)") %>% + fct_explicit_na("Missing") %>% + fct_lump(8, other_level = "Other") + # end ---- + ) %>% + ff_relabel(labels_keep) + + + +appdata %>% + count(op_contam, sort = TRUE) + + +appdata %>% + filter(pre_dec_op_day < 1000) %>% + ggplot(aes(pre_dec_op_day)) + + geom_histogram(binwidth = 1) + +appdata %>% + #filter(admission_prior < 10) %>% + ggplot(aes(pre_dec_op_day.groups)) + + geom_bar() # %>% #select_if(is.factor) %>% #mutate_if(is.factor, fct_explicit_na, na_level = "Missing") %>% @@ -67,13 +131,31 @@ appdata = patient_data_orig %>% # levels(appdata$diagnosis_timing) = str_trunc(levels(appdata$diagnosis_timing), width = 25) +appdata = appdata %>% + select(-record_id, -age_years, -admission_prior, -post30_los, + -pre_symp_adm_day, + -pre_diag_dec_day, + -pre_dec_op_day, + -pt_comorbid, + -pre_img_finding, + -pre_img_finding_cbd, + -op_anaes) + + +# pointblank::scan_data(appdata, sections = "OV") + + allvars = appdata %>% - select(-record_id, -age_years, -admission_prior, -post30_los) %>% select(-contains("_day")) %>% finalfit::extract_labels() %>% select(vname, vfill) %$% setNames(as.list(vname), vfill) + + +updated_date = format(Sys.time(), format = "%d-%B %Y") + usethis::use_data(appdata, overwrite = TRUE) usethis::use_data(allvars, overwrite = TRUE) +usethis::use_data(updated_date, overwrite = TRUE) diff --git a/rsconnect/argoshare.is.ed.ac.uk/rots/gecko_shinyviz.dcf b/rsconnect/argoshare.is.ed.ac.uk/rots/gecko_shinyviz.dcf index 04ede41..b76661e 100644 --- a/rsconnect/argoshare.is.ed.ac.uk/rots/gecko_shinyviz.dcf +++ b/rsconnect/argoshare.is.ed.ac.uk/rots/gecko_shinyviz.dcf @@ -5,9 +5,9 @@ account: rots server: argoshare.is.ed.ac.uk hostUrl: https://argoshare.is.ed.ac.uk/__api__ appId: 639 -bundleId: 3265 +bundleId: 3273 url: https://argoshare.is.ed.ac.uk/gecko_shinyviz/ -when: 1694698060.84986 -lastSyncTime: 1694698060.84987 +when: 1694790034.70899 +lastSyncTime: 1694790034.709 asMultiple: FALSE asStatic: FALSE diff --git a/temp_histogram_ggplot.png b/temp_histogram_ggplot.png new file mode 100644 index 0000000000000000000000000000000000000000..e315db3ac12bdea4b9208b6fc77281b492ec4da9 GIT binary patch literal 24151 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 literal 0 HcmV?d00001 diff --git a/temp_matrix_ggplot.png b/temp_matrix_ggplot.png new file mode 100644 index 0000000000000000000000000000000000000000..85be6a423221397da07409a3ac34f285358cffe1 GIT binary patch literal 43708 zcmeI)eM}o=90%~@#qpvPh>NlXN|9-n5r^7EK^di30?m~8GQwbxB5_57x1GQE}3Mek+-mRA{53<2E+>4A5cQ2OzCK#&<6**k`B@+`?&5@dR2o67g(ay)a- z;C!=J;+aJV@`{86u`}5_28mi(wFJQ+xE%Igk#f=4^-XKxmdk&w>f<_JdYf5osp7|MNqGMt_FbYAR}?9Pi_Q6D9lQ}Yr}U43r6Jh}H!SyF4EWisu< zF4thf_eU)AruUVr4Lnj2w2?g~5P$##{78U)rT$v<^&2JVqMH%kT?dxuR zgHR}38R@Z;GbdO}I$n>;P%KH0r%A-p-3M(tiMXn2S!K0ac}kaCE;kyD(RQ1yNyO^V z^k>G?1|-d;6w(HZICU+kZ&y?2MEx$N@bxoIOlC!NHGgiXvQ0G;Ew*>?=h!l(X2Qi3 z?yFp{;g8bIdc9(mw3=pzT390KZYI-Dtp!w zAthwu<}0zD=hodJi$VQAAz35rd4W zhXT|%xo|n*2130@;+Bbr1fIvJfl%)WsB@u~iF!5R{=Gk8ffMt^yK(DA*=&;IyVuyu zwC$UtrNKwCWI;JG+x521ArZqVTeGWASes4qV{Xbt#PE5`k@~#W_?%%rFD}?v3NRx0 zzfTguKZexHq#%PnGZg1it6#o4^!4$HshR>^qspR8O{wkI?o=-<3eqy#e~}oqE|be` z>7M@VP)S!oL1CNbg8J8@Drekm&8XA5e@;1;qE#=nYqT@kPe&xqYE$tW>zTJq2Mdqs z(|PrFSGq;}w_B~Am^x4}O-?rK(>y^r*YOhq5P$##AOHafK)@dbdd#cRJ8c2{F+Riu z0SG)=0oCH*;f)ARl9kCnsWCtR0uX=z1Rwwb2tWV=5P$##AQ0#Ronc|Y-j4xU?vCT< z0==*(9|Rx(0SG_<0uX=z1OivUK6Ps8PFsM$EhS0@0SG*Bfh+X*@Qp?S&Vg5D4}9;~ zAp{@*0SG_<0uX=z1Rwwb2tWV={w5G97BDux1(?aHaDNL9@jw6q5P$##AOHafKmY>1 z0@;qLJ!lKytAaEHAaLITJJ6B9ecNF}2tWV=5P$##AOHafKmY;|fWTuZfQ|$n%fp7C zApijgKmY;|fB*ynUZAL@`3Bko1pHw}0U_WA0_aG<4-NuCfB*y_009U<00Izz00bZa z0SG)q0dyqr5V4UJ1Rwwb2tWV=5P$##?h)7)%pE3(NCua~-h0nVEPwz6An?Bn>{uF1 x3i9+YC_P7ZlztGh(bpg*5P$##An@n~u0Jzw?{F~=#O8Qo;pXIX+Ox}K{{n)cefj_Z literal 0 HcmV?d00001