mirror of
https://github.com/agdamsbo/FreesearchR.git
synced 2025-12-16 09:32:10 +01:00
Compare commits
12 commits
61ca275690
...
653424692d
| Author | SHA1 | Date | |
|---|---|---|---|
| 653424692d | |||
| 747670bb57 | |||
| 913844d34b | |||
| ae9aa2e6f5 | |||
| ebc8c65628 | |||
| 5a632e60fa | |||
| a1cc2d8955 | |||
| b21077b52d | |||
| 5249c7c2c0 | |||
| 901864acff | |||
| 48f4d99429 | |||
| 59cefc55a3 |
35 changed files with 2921 additions and 303 deletions
|
|
@ -8,7 +8,7 @@ message: 'To cite package "FreesearchR" in publications use:'
|
|||
type: software
|
||||
license: AGPL-3.0-or-later
|
||||
title: 'FreesearchR: Easy data analysis for clinicians'
|
||||
version: 25.10.4
|
||||
version: 25.10.5
|
||||
doi: 10.5281/zenodo.14527429
|
||||
identifiers:
|
||||
- type: url
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Package: FreesearchR
|
||||
Title: Easy data analysis for clinicians
|
||||
Version: 25.10.4
|
||||
Version: 25.10.5
|
||||
Authors@R: c(
|
||||
person("Andreas Gammelgaard", "Damsbo",email="agdamsbo@clin.au.dk", role = c("aut", "cre"),
|
||||
comment = c(ORCID = "0000-0002-7559-1154")),
|
||||
|
|
@ -112,6 +112,7 @@ Collate:
|
|||
'launch_FreesearchR.R'
|
||||
'missings-module.R'
|
||||
'plot-download-module.R'
|
||||
'plot_bar.R'
|
||||
'plot_box.R'
|
||||
'plot_euler.R'
|
||||
'plot_hbar.R'
|
||||
|
|
@ -125,6 +126,7 @@ Collate:
|
|||
'regression_plot.R'
|
||||
'regression_table.R'
|
||||
'report.R'
|
||||
'separate_string.R'
|
||||
'syntax_highlight.R'
|
||||
'theme.R'
|
||||
'translate.R'
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ export(data_visuals_server)
|
|||
export(data_visuals_ui)
|
||||
export(default_format_arguments)
|
||||
export(default_parsing)
|
||||
export(detect_delimiter)
|
||||
export(drop_empty_event)
|
||||
export(expression_string)
|
||||
export(factorize)
|
||||
|
|
@ -78,6 +79,7 @@ export(is_any_class)
|
|||
export(is_consecutive)
|
||||
export(is_datetime)
|
||||
export(is_identical_to_previous)
|
||||
export(is_splittable)
|
||||
export(is_valid_redcap_url)
|
||||
export(is_valid_token)
|
||||
export(launch_FreesearchR)
|
||||
|
|
@ -98,12 +100,14 @@ export(missings_apex_plot)
|
|||
export(missings_validate)
|
||||
export(modal_create_column)
|
||||
export(modal_cut_variable)
|
||||
export(modal_string_split)
|
||||
export(modal_update_factor)
|
||||
export(modal_visual_summary)
|
||||
export(modify_qmd)
|
||||
export(names2val)
|
||||
export(overview_vars)
|
||||
export(pipe_string)
|
||||
export(plot_bar_single)
|
||||
export(plot_box)
|
||||
export(plot_box_single)
|
||||
export(plot_euler)
|
||||
|
|
@ -129,11 +133,14 @@ export(remove_nested_list)
|
|||
export(repeated_instruments)
|
||||
export(sankey_ready)
|
||||
export(selectInputIcon)
|
||||
export(separate_string)
|
||||
export(set_column_label)
|
||||
export(show_data)
|
||||
export(simple_snake)
|
||||
export(sort_by)
|
||||
export(specify_qmd_format)
|
||||
export(string_split_server)
|
||||
export(string_split_ui)
|
||||
export(subset_types)
|
||||
export(supported_functions)
|
||||
export(supported_plots)
|
||||
|
|
|
|||
8
NEWS.md
8
NEWS.md
|
|
@ -1,3 +1,11 @@
|
|||
# FreesearchR 25.10.5
|
||||
|
||||
*NEW* New character/text split function available. A selection of delimiters are recognised and selectable. Function only available if splittable variables are present.
|
||||
|
||||
*NEW* Distribution plotting for factors have been much improved including two new bar plot styles and removing options better suited for continuous data.
|
||||
|
||||
These were the last major functions to be implemented after workshops at Jitimai in Zanzibar City, Zanzibar during October 2025.
|
||||
|
||||
# FreesearchR 25.10.4
|
||||
|
||||
*NEW* Two new options to create new simplified factors from factors. The "top" option will keep only the top N levels, while the "bottom" option will combine all levels occurring below set percentage.
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
app_version <- function()'25.10.4'
|
||||
app_version <- function()'25.10.5'
|
||||
|
|
|
|||
|
|
@ -29,35 +29,6 @@ create_column_ui <- function(id) {
|
|||
shiny::tags$head(
|
||||
shiny::tags$link(rel = "stylesheet", type = "text/css", href = "FreesearchR/inst/assets/css/FreesearchR.css")
|
||||
),
|
||||
# tags$head(
|
||||
# # Note the wrapping of the string in HTML()
|
||||
# tags$style(HTML("
|
||||
# /* modified from esquisse for data types */
|
||||
# .btn-column-categorical {
|
||||
# background-color: #EF562D;
|
||||
# color: #FFFFFF;
|
||||
# }
|
||||
# .btn-column-continuous {
|
||||
# background-color: #0C4C8A;
|
||||
# color: #FFFFFF;
|
||||
# }
|
||||
# .btn-column-dichotomous {
|
||||
# background-color: #97D5E0;
|
||||
# color: #FFFFFF;
|
||||
# }
|
||||
# .btn-column-datetime {
|
||||
# background-color: #97D5E0;
|
||||
# color: #FFFFFF;
|
||||
# }
|
||||
# .btn-column-id {
|
||||
# background-color: #848484;
|
||||
# color: #FFFFFF;
|
||||
# }
|
||||
# .btn-column-text {
|
||||
# background-color: #2E2E2E;
|
||||
# color: #FFFFFF;
|
||||
# }"))
|
||||
# ),
|
||||
fluidRow(
|
||||
column(
|
||||
width = 6,
|
||||
|
|
|
|||
|
|
@ -35,14 +35,7 @@ cut_variable_ui <- function(id) {
|
|||
),
|
||||
column(
|
||||
width = 3,
|
||||
numericInput(
|
||||
inputId = ns("n_breaks"),
|
||||
label = i18n$t("Number of breaks:"),
|
||||
value = 3,
|
||||
min = 2,
|
||||
max = 12,
|
||||
width = "100%"
|
||||
)
|
||||
shiny::uiOutput(ns("n_breaks"))
|
||||
),
|
||||
column(
|
||||
width = 3,
|
||||
|
|
@ -123,8 +116,38 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
|
|||
# )
|
||||
}), data_r(), input$hidden)
|
||||
|
||||
output$n_breaks <- shiny::renderUI({
|
||||
req(input$method)
|
||||
# req(!is.null(get_list_elements(name = input$cut_method,element = "breaks")))
|
||||
# browser()
|
||||
|
||||
break_text <- get_list_elements(name = input$method, element = "breaks")
|
||||
|
||||
if (is.null(get_list_elements(name = input$method, element = "min"))) {
|
||||
min <- 2
|
||||
} else {
|
||||
min <- get_list_elements(name = input$method, element = "min")
|
||||
}
|
||||
|
||||
if (is.null(get_list_elements(name = input$method, element = "max"))) {
|
||||
max <- 10
|
||||
} else {
|
||||
max <- get_list_elements(name = input$method, element = "max")
|
||||
}
|
||||
|
||||
numericInput(
|
||||
inputId = ns("n_breaks"),
|
||||
label = break_text,
|
||||
value = 3,
|
||||
min = min,
|
||||
max = max,
|
||||
width = "100%"
|
||||
)
|
||||
})
|
||||
|
||||
output$slider_fixed <- renderUI({
|
||||
data <- req(data_r())
|
||||
req(input$n_breaks)
|
||||
variable <- req(input$variable)
|
||||
req(hasName(data, variable))
|
||||
|
||||
|
|
@ -214,13 +237,6 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
|
|||
|
||||
choices <- unique(choices)
|
||||
|
||||
## Implement labeled vector selection of cut methods to include descriptions
|
||||
##
|
||||
## cut_methods()
|
||||
##
|
||||
|
||||
|
||||
|
||||
vectorSelectInput(
|
||||
inputId = ns("method"),
|
||||
label = i18n$t("Method:"),
|
||||
|
|
@ -228,14 +244,6 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
|
|||
selected = NULL,
|
||||
width = "100%"
|
||||
)
|
||||
|
||||
# shinyWidgets::virtualSelectInput(
|
||||
# inputId = session$ns("method"),
|
||||
# label = i18n$t("Method:"),
|
||||
# choices = choices,
|
||||
# selected = NULL,
|
||||
# width = "100%"
|
||||
# )
|
||||
})
|
||||
|
||||
|
||||
|
|
@ -388,6 +396,7 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
|
|||
# shiny::req(rv$new_var_name)
|
||||
data <- req(data_cutted_r())
|
||||
# variable <- req(input$variable)
|
||||
|
||||
count_data <- as.data.frame(
|
||||
table(
|
||||
breaks = data[[length(data)]],
|
||||
|
|
@ -395,6 +404,8 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
|
|||
),
|
||||
responseName = "count"
|
||||
)
|
||||
count_data$freq <- paste(signif(count_data$count / nrow(data) * 100, 3), "%")
|
||||
# browser()
|
||||
gridTheme <- getOption("datagrid.theme")
|
||||
if (length(gridTheme) < 1) {
|
||||
datamods:::apply_grid_theme()
|
||||
|
|
@ -402,7 +413,7 @@ cut_variable_server <- function(id, data_r = reactive(NULL)) {
|
|||
on.exit(toastui::reset_grid_theme())
|
||||
grid <- toastui::datagrid(
|
||||
data = count_data,
|
||||
colwidths = "guess",
|
||||
colwidths = "fit",
|
||||
theme = "default",
|
||||
bodyHeight = "auto"
|
||||
)
|
||||
|
|
@ -490,55 +501,63 @@ cut_methods <- function() {
|
|||
"hour" = list(
|
||||
descr = i18n$t("Hour of the day"),
|
||||
# class = c("hms", "POSIXct"), # Not implemented yet, but will during rewrite at some point...
|
||||
breaks = i18n$t("Breaks")
|
||||
breaks = NULL
|
||||
),
|
||||
"day" = list(
|
||||
descr = i18n$t("By day of the week"),
|
||||
breaks = i18n$t("Breaks")
|
||||
breaks = NULL
|
||||
),
|
||||
"weekday" = list(
|
||||
descr = i18n$t("By weekday"),
|
||||
breaks = i18n$t("Breaks")
|
||||
breaks = NULL
|
||||
),
|
||||
"week" = list(
|
||||
descr = i18n$t("By week number and year"),
|
||||
breaks = i18n$t("Breaks")
|
||||
breaks = NULL
|
||||
),
|
||||
"week_only" = list(
|
||||
descr = i18n$t("By week number"),
|
||||
breaks = i18n$t("Breaks")
|
||||
breaks = NULL
|
||||
),
|
||||
"month" = list(
|
||||
descr = i18n$t("By month and year"),
|
||||
breaks = i18n$t("Breaks")
|
||||
breaks = NULL
|
||||
),
|
||||
"month_only" = list(
|
||||
descr = i18n$t("By month only"),
|
||||
breaks = i18n$t("Breaks")
|
||||
breaks = NULL
|
||||
),
|
||||
"quarter" = list(
|
||||
descr = i18n$t("By quarter of the year"),
|
||||
breaks = i18n$t("Breaks")
|
||||
breaks = NULL
|
||||
),
|
||||
"year" = list(
|
||||
descr = i18n$t("By year"),
|
||||
breaks = i18n$t("Breaks")
|
||||
breaks = NULL
|
||||
),
|
||||
"top" = list(
|
||||
descr = i18n$t("Keep only most common"),
|
||||
breaks = i18n$t("Number")
|
||||
breaks = i18n$t("Number"),
|
||||
min = 1,
|
||||
max = 20
|
||||
),
|
||||
"bottom" = list(
|
||||
descr = i18n$t("Combine below percentage"),
|
||||
breaks = i18n$t("Percentage")
|
||||
breaks = i18n$t("Percentage"),
|
||||
min = 1,
|
||||
max = 50
|
||||
),
|
||||
"fixed" = list(
|
||||
descr = i18n$t("By specified numbers"),
|
||||
breaks = i18n$t("Breaks")
|
||||
breaks = i18n$t("Breaks"),
|
||||
min = 2,
|
||||
max = 12
|
||||
),
|
||||
"quantile" = list(
|
||||
descr = i18n$t("By quantiles (groups of equal size)"),
|
||||
breaks = i18n$t("Breaks")
|
||||
breaks = i18n$t("Breaks"),
|
||||
min = 2,
|
||||
max = 10
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
@ -559,9 +578,13 @@ cut_methods <- function() {
|
|||
#' @examples
|
||||
#' get_list_elements(c("top", "bottom"), "descr")
|
||||
get_list_elements <- function(name, element, dict = cut_methods()) {
|
||||
sapply(dict[name], \(.x){
|
||||
.x[[element]]
|
||||
})
|
||||
if (is.null(name)) {
|
||||
return(NULL)
|
||||
} else {
|
||||
sapply(dict[name], \(.x){
|
||||
.x[[element]]
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#' Set values as names and names as values
|
||||
|
|
|
|||
|
|
@ -184,9 +184,16 @@ cut_var.factor <- function(x, breaks = NULL, type = c("top", "bottom"), other =
|
|||
tbl <- sort(table(x), decreasing = TRUE)
|
||||
|
||||
if (type == "top") {
|
||||
if (length(levels(x)) <= breaks){
|
||||
return(x)
|
||||
}
|
||||
lvls <- names(tbl[seq_len(breaks)])
|
||||
} else if (type == "bottom") {
|
||||
lvls <- names(tbl)[!tbl / NROW(x) * 100 < breaks]
|
||||
freqs_check <- tbl / NROW(x) * 100 < breaks
|
||||
if (!any(freqs_check)){
|
||||
return(x)
|
||||
}
|
||||
lvls <- names(tbl)[!freqs_check]
|
||||
}
|
||||
|
||||
if (other %in% lvls) {
|
||||
|
|
|
|||
|
|
@ -343,6 +343,12 @@ data_visuals_server <- function(id,
|
|||
ter = input$tertiary
|
||||
)
|
||||
|
||||
## If the dictionary holds additional arguments to pass to the
|
||||
## plotting function, these are included
|
||||
if (!is.null(rv$plot.params()[["fun.args"]])){
|
||||
parameters <- modifyList(parameters,rv$plot.params()[["fun.args"]])
|
||||
}
|
||||
|
||||
shiny::withProgress(message = i18n$t("Drawing the plot. Hold tight for a moment.."), {
|
||||
rv$plot <- rlang::exec(
|
||||
create_plot,
|
||||
|
|
@ -492,6 +498,28 @@ subset_types <- function(data, types, type.fun = data_type) {
|
|||
#' supported_plots() |> str()
|
||||
supported_plots <- function() {
|
||||
list(
|
||||
plot_bar_rel = list(
|
||||
fun = "plot_bar",
|
||||
fun.args =list(style="fill"),
|
||||
descr = i18n$t("Stacked relative barplot"),
|
||||
note = i18n$t("Create relative stacked barplots to show the distribution of categorical levels"),
|
||||
primary.type = c("dichotomous", "categorical"),
|
||||
secondary.type = c("dichotomous", "categorical"),
|
||||
secondary.multi = FALSE,
|
||||
tertiary.type = c("dichotomous", "categorical"),
|
||||
secondary.extra = NULL
|
||||
),
|
||||
plot_bar_abs = list(
|
||||
fun = "plot_bar",
|
||||
fun.args =list(style="dodge"),
|
||||
descr = i18n$t("Side-by-side barplot"),
|
||||
note = i18n$t("Create side-by-side barplot to show the distribution of categorical levels"),
|
||||
primary.type = c("dichotomous", "categorical"),
|
||||
secondary.type = c("dichotomous", "categorical"),
|
||||
secondary.multi = FALSE,
|
||||
tertiary.type = c("dichotomous", "categorical"),
|
||||
secondary.extra = "none"
|
||||
),
|
||||
plot_hbars = list(
|
||||
fun = "plot_hbars",
|
||||
descr = i18n$t("Stacked horizontal bars"),
|
||||
|
|
@ -506,7 +534,7 @@ supported_plots <- function() {
|
|||
fun = "plot_violin",
|
||||
descr = i18n$t("Violin plot"),
|
||||
note = i18n$t("A modern alternative to the classic boxplot to visualise data distribution"),
|
||||
primary.type = c("datatime", "continuous", "dichotomous", "categorical"),
|
||||
primary.type = c("datatime", "continuous"),
|
||||
secondary.type = c("dichotomous", "categorical"),
|
||||
secondary.multi = FALSE,
|
||||
secondary.extra = "none",
|
||||
|
|
@ -544,7 +572,7 @@ supported_plots <- function() {
|
|||
fun = "plot_box",
|
||||
descr = i18n$t("Box plot"),
|
||||
note = i18n$t("A classic way to plot data distribution by groups"),
|
||||
primary.type = c("datatime", "continuous", "dichotomous", "categorical"),
|
||||
primary.type = c("datatime", "continuous"),
|
||||
secondary.type = c("dichotomous", "categorical"),
|
||||
secondary.multi = FALSE,
|
||||
tertiary.type = c("dichotomous", "categorical"),
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
hosted_version <- function()'v25.10.4-251027'
|
||||
hosted_version <- function()'v25.10.5-251031'
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ data_missings_ui <- function(id) {
|
|||
data_missings_server <- function(id,
|
||||
data,
|
||||
variable,
|
||||
max_level=20,
|
||||
...) {
|
||||
shiny::moduleServer(
|
||||
id = id,
|
||||
|
|
@ -44,7 +45,7 @@ data_missings_server <- function(id,
|
|||
|
||||
tryCatch(
|
||||
{
|
||||
out <- compare_missings(df_tbl,by_var)
|
||||
out <- compare_missings(df_tbl,by_var,max_level = max_level)
|
||||
},
|
||||
error = function(err) {
|
||||
showNotification(paste0("Error: ", err), type = "err")
|
||||
|
|
@ -133,8 +134,18 @@ missing_demo_app()
|
|||
#' @returns gtsummary list object
|
||||
#' @export
|
||||
#'
|
||||
compare_missings <- function(data,by_var){
|
||||
compare_missings <- function(data,by_var,max_level=20){
|
||||
if (!is.null(by_var) && by_var != "" && by_var %in% names(data)) {
|
||||
data <- data |>
|
||||
lapply(\(.x){
|
||||
# browser()
|
||||
if (is.factor(.x)){
|
||||
cut_var(.x,breaks=20,type="top")
|
||||
} else {
|
||||
.x
|
||||
}
|
||||
}) |> dplyr::bind_cols()
|
||||
|
||||
data[[by_var]] <- ifelse(is.na(data[[by_var]]), "Missing", "Non-missing")
|
||||
|
||||
out <- gtsummary::tbl_summary(data, by = by_var) |>
|
||||
|
|
|
|||
125
R/plot_bar.R
Normal file
125
R/plot_bar.R
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
plot_bar <- function(data, pri, sec, ter = NULL, style = c("stack", "dodge", "fill"), max_level = 30, ...) {
|
||||
style <- match.arg(style)
|
||||
|
||||
if (!is.null(ter)) {
|
||||
ds <- split(data, data[ter])
|
||||
} else {
|
||||
ds <- list(data)
|
||||
}
|
||||
|
||||
out <- lapply(ds, \(.ds){
|
||||
plot_bar_single(
|
||||
data = .ds,
|
||||
pri = pri,
|
||||
sec = sec,
|
||||
style = style,
|
||||
max_level = max_level
|
||||
)
|
||||
})
|
||||
|
||||
wrap_plot_list(out, title = glue::glue(i18n$t("Grouped by {get_label(data,ter)}")), ...)
|
||||
}
|
||||
|
||||
|
||||
#' Single vertical barplot
|
||||
#'
|
||||
#' @param style barplot style passed to geom_bar position argument.
|
||||
#' One of c("stack", "dodge", "fill")
|
||||
#'
|
||||
#' @name data-plots
|
||||
#'
|
||||
#' @returns ggplot object
|
||||
#' @export
|
||||
#'
|
||||
#' @examples
|
||||
#' mtcars |>
|
||||
#' dplyr::mutate(cyl = factor(cyl), am = factor(am)) |>
|
||||
#' plot_bar_single(pri = "cyl", sec = "am", style = "fill")
|
||||
#'
|
||||
#' mtcars |>
|
||||
#' dplyr::mutate(cyl = factor(cyl), am = factor(am)) |>
|
||||
#' plot_bar_single(pri = "cyl", style = "stack")
|
||||
plot_bar_single <- function(data, pri, sec = NULL, style = c("stack", "dodge", "fill"), max_level = 30) {
|
||||
style <- match.arg(style)
|
||||
|
||||
if (identical(sec, "none")) {
|
||||
sec <- NULL
|
||||
}
|
||||
|
||||
p_data <- as.data.frame(table(data[c(pri, sec)])) |>
|
||||
dplyr::mutate(dplyr::across(tidyselect::any_of(c(pri, sec)), forcats::as_factor),
|
||||
p = Freq / NROW(data)
|
||||
)
|
||||
|
||||
|
||||
if (nrow(p_data) > max_level) {
|
||||
# browser()
|
||||
p_data <- sort_by(
|
||||
p_data,
|
||||
p_data[["Freq"]],
|
||||
decreasing = TRUE
|
||||
) |>
|
||||
head(max_level)
|
||||
# if (is.null(sec)){
|
||||
# p_data <- sort_by(
|
||||
# p_data,
|
||||
# p_data[["Freq"]],
|
||||
# decreasing=TRUE) |>
|
||||
# head(max_level)
|
||||
# } else {
|
||||
# split(p_data,p_data[[sec]]) |>
|
||||
# lapply(\(.x){
|
||||
# # browser()
|
||||
# sort_by(
|
||||
# .x,
|
||||
# .x[["Freq"]],
|
||||
# decreasing=TRUE) |>
|
||||
# head(max_level)
|
||||
# }) |> dplyr::bind_rows()
|
||||
# }
|
||||
}
|
||||
|
||||
## Shortens long level names
|
||||
p_data[[pri]] <- forcats::as_factor(unique_short(as.character(p_data[[pri]]), max = 20))
|
||||
|
||||
if (!is.null(sec)) {
|
||||
fill <- sec
|
||||
} else {
|
||||
fill <- pri
|
||||
}
|
||||
|
||||
p <- ggplot2::ggplot(
|
||||
p_data,
|
||||
ggplot2::aes(
|
||||
x = .data[[pri]],
|
||||
y = p,
|
||||
fill = .data[[fill]]
|
||||
)
|
||||
) +
|
||||
ggplot2::geom_bar(position = style, stat = "identity") +
|
||||
ggplot2::scale_y_continuous(labels = scales::percent) +
|
||||
ggplot2::ylab("Percentage") +
|
||||
ggplot2::xlab(get_label(data,pri))+
|
||||
ggplot2::guides(fill = ggplot2::guide_legend(title = get_label(data,fill)))
|
||||
|
||||
## To handle large number of levels and long level names
|
||||
|
||||
if (nrow(p_data) > 10 | any(nchar(as.character(p_data[[pri]])) > 6)) {
|
||||
p <- p +
|
||||
# ggplot2::guides(fill = "none") +
|
||||
ggplot2::theme(
|
||||
axis.text.x = ggplot2::element_text(
|
||||
angle = 90,
|
||||
vjust = 1, hjust = 1
|
||||
))+
|
||||
ggplot2::theme(
|
||||
axis.text.x = ggplot2::element_text(vjust = 0.5)
|
||||
)
|
||||
|
||||
if (is.null(sec)){
|
||||
p <- p +
|
||||
ggplot2::guides(fill = "none")
|
||||
}
|
||||
}
|
||||
p
|
||||
}
|
||||
|
|
@ -39,8 +39,6 @@ plot_box <- function(data, pri, sec, ter = NULL,...) {
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#' Create nice box-plots
|
||||
#'
|
||||
#' @name data-plots
|
||||
|
|
|
|||
450
R/separate_string.R
Normal file
450
R/separate_string.R
Normal file
|
|
@ -0,0 +1,450 @@
|
|||
#' String split module based on tidyr::separate_
|
||||
#'
|
||||
#' @param id id
|
||||
#'
|
||||
#' @returns A shiny ui module
|
||||
#' @export
|
||||
#'
|
||||
#' @name split-string
|
||||
#'
|
||||
string_split_ui <- function(id) {
|
||||
ns <- NS(id)
|
||||
tagList(
|
||||
shiny::fluidRow(
|
||||
# shiny::textOutput(outputId = ns("no_splits")),
|
||||
column(
|
||||
width = 4,
|
||||
shiny::uiOutput(outputId = ns("variable"))
|
||||
),
|
||||
column(
|
||||
width = 4,
|
||||
shiny::uiOutput(outputId = ns("delim"))
|
||||
),
|
||||
column(
|
||||
width = 4,
|
||||
shiny::uiOutput(outputId = ns("direction"))
|
||||
) # ,
|
||||
# column(
|
||||
# width = 3,
|
||||
# actionButton(
|
||||
# inputId = ns("split"),
|
||||
# label = tagList(phosphoricons::ph("scissors"), i18n$t("Split the variable")),
|
||||
# class = "btn-outline-primary float-end"
|
||||
# )
|
||||
# )
|
||||
),
|
||||
shiny::fluidRow(
|
||||
column(
|
||||
width = 4,
|
||||
shiny::h4(i18n$t("Original data")),
|
||||
toastui::datagridOutput2(outputId = ns("orig_data"))
|
||||
# DT::DTOutput(outputId = ns("orig_data_3"))
|
||||
# This doesn't render...
|
||||
# toastui::datagridOutput2(outputId = ns("orig_data_2"))
|
||||
),
|
||||
column(
|
||||
width = 8,
|
||||
shiny::h4(i18n$t("Preview of result")),
|
||||
toastui::datagridOutput2(outputId = ns("new_data"))
|
||||
)
|
||||
),
|
||||
actionButton(
|
||||
inputId = ns("create"),
|
||||
label = tagList(phosphoricons::ph("pencil"), i18n$t("Apply split")),
|
||||
class = "btn-outline-primary float-end"
|
||||
),
|
||||
tags$div(class = "clearfix")
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
|
||||
#' @param data_r reactive data
|
||||
#'
|
||||
#' @returns shiny module server
|
||||
#' @export
|
||||
#'
|
||||
#' @name split-string
|
||||
#'
|
||||
string_split_server <- function(id, data_r = reactive(NULL)) {
|
||||
moduleServer(
|
||||
id,
|
||||
function(input, output, session) {
|
||||
rv <- reactiveValues(data = NULL, target=NULL, temp = NULL, out=NULL)
|
||||
|
||||
ns <- session$ns
|
||||
|
||||
# output$no_splits <- shiny::renderText({
|
||||
# req({
|
||||
# data_r()
|
||||
# })
|
||||
#
|
||||
# if (any(is_splittable(data_r()))) {
|
||||
# i18n$t("No character variables with accepted delimiters detected.")
|
||||
# }
|
||||
# })
|
||||
|
||||
shiny::observe({
|
||||
req(data_r())
|
||||
|
||||
# if (any(is_splittable(data_r()))) {
|
||||
data <- data_r()
|
||||
rv$data <- data
|
||||
|
||||
vars_num <- vapply(data, \(.x){
|
||||
is_splittable(.x)
|
||||
}, logical(1))
|
||||
vars_num <- names(vars_num)[vars_num]
|
||||
|
||||
req(length(vars_num)>0)
|
||||
|
||||
output$variable <- shiny::renderUI(
|
||||
columnSelectInput(
|
||||
inputId = ns("variable"),
|
||||
data = data,
|
||||
label = i18n$t("Variable to split:"),
|
||||
width = "100%",
|
||||
col_subset = vars_num,
|
||||
selected = if (isTruthy(input$variable)) input$variable else vars_num[1]
|
||||
)
|
||||
)
|
||||
# }
|
||||
# shinyWidgets::updateVirtualSelect(
|
||||
# inputId = "variable",
|
||||
# choices = vars_num,
|
||||
# selected = if (isTruthy(input$variable)) input$variable else vars_num[1]
|
||||
# )
|
||||
})
|
||||
|
||||
output$delim <- shiny::renderUI({
|
||||
req(rv$data)
|
||||
req(input$variable)
|
||||
# browser()
|
||||
|
||||
req(input$variable %in% names(rv$data))
|
||||
# req({
|
||||
# any(apply(data_r(),2,is_splittable))
|
||||
# })
|
||||
# if (any(is_splittable(data_r()))) {
|
||||
data <- rv$data |>
|
||||
dplyr::select(tidyselect::all_of(input$variable))
|
||||
|
||||
delimiters <- Reduce(c, unique(sapply(data[[1]], detect_delimiter)))
|
||||
|
||||
# shiny::textInput(inputId = ns("delim"), label = i18n$t("Text or character to split string by"))
|
||||
shiny::selectInput(
|
||||
inputId = ns("delim"), label = i18n$t("Select delimiter"),
|
||||
choices = setNames(
|
||||
delimiters,
|
||||
glue::glue("'{delimiters}'")
|
||||
), selected = 1
|
||||
)
|
||||
# }
|
||||
})
|
||||
|
||||
|
||||
output$direction <- shiny::renderUI({
|
||||
# req({
|
||||
# rv$data
|
||||
# })
|
||||
|
||||
# if (any(is_splittable(data_r()))) {
|
||||
vectorSelectInput(
|
||||
inputId = ns("direction"),
|
||||
label = i18n$t("Direction:"),
|
||||
choices = setNames(
|
||||
c(
|
||||
"wide",
|
||||
"long"
|
||||
),
|
||||
c(
|
||||
i18n$t("Split string to multiple columns. Keep number of rows."),
|
||||
i18n$t("Split string to multiple observations (rows) in the same column. Also ads id and instance columns")
|
||||
)
|
||||
),
|
||||
selected = "wide",
|
||||
width = "100%"
|
||||
)
|
||||
# }
|
||||
})
|
||||
|
||||
observeEvent(
|
||||
list(
|
||||
input$variable,
|
||||
input$delim,
|
||||
input$direction
|
||||
),
|
||||
{
|
||||
req(rv$data)
|
||||
req(input$variable)
|
||||
req(input$delim)
|
||||
req(input$direction)
|
||||
|
||||
data <- rv$data |>
|
||||
dplyr::select(tidyselect::all_of(input$variable))
|
||||
# browser()
|
||||
rv$temp <- separate_string(
|
||||
data = data,
|
||||
col = input$variable,
|
||||
delim = input$delim,
|
||||
direction = input$direction
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
# shiny::observeEvent(input$split, {
|
||||
# show_data(rv$temp, title = i18n$t("Browse data preview"), type = "modal")
|
||||
# })
|
||||
|
||||
## Toastui would not render the original data, so the solution was to go
|
||||
## with native table rendering, which works, but doesn't please the eye
|
||||
|
||||
# output$orig_data <- shiny::renderTable({
|
||||
# req(data_r())
|
||||
# req(input$variable)
|
||||
# data <- data_r() |>
|
||||
# dplyr::select(tidyselect::all_of(input$variable))
|
||||
# # browser()
|
||||
# head(data, 10)
|
||||
# })
|
||||
|
||||
output$orig_data <- toastui::renderDatagrid2({
|
||||
req(data_r())
|
||||
req(input$variable)
|
||||
|
||||
req(hasName(rv$data, input$variable))
|
||||
|
||||
data <- data_r() |>
|
||||
dplyr::select(tidyselect::all_of(input$variable)) |>
|
||||
head(30) |>
|
||||
dplyr::mutate(row=dplyr::row_number()) |>
|
||||
dplyr::select(row,tidyselect::everything())
|
||||
# browser()
|
||||
toastui::datagrid(
|
||||
data = data,
|
||||
rowHeight = 40,
|
||||
colwidths = "guess",
|
||||
theme = "default",
|
||||
bodyHeight = "auto",
|
||||
pagination = 10)
|
||||
})
|
||||
|
||||
output$new_data <- toastui::renderDatagrid2({
|
||||
shiny::req(rv$temp)
|
||||
data <- rv$temp
|
||||
toastui::datagrid(
|
||||
data = head(data, 30),
|
||||
rowHeight = 40,
|
||||
colwidths = "guess",
|
||||
theme = "default",
|
||||
bodyHeight = "auto", pagination = 10
|
||||
)
|
||||
})
|
||||
|
||||
data_split_r <- reactive({
|
||||
req(rv$temp)
|
||||
|
||||
data <- rv$data
|
||||
|
||||
parameters <- list(
|
||||
col = input$variable,
|
||||
delim = input$delim,
|
||||
direction = input$direction
|
||||
)
|
||||
|
||||
out <- tryCatch({
|
||||
rlang::exec(separate_string, !!!modifyList(
|
||||
parameters,
|
||||
list(
|
||||
data = data
|
||||
)
|
||||
))
|
||||
})
|
||||
# browser()
|
||||
|
||||
# separate_string(
|
||||
# data = data,
|
||||
#
|
||||
# )
|
||||
|
||||
code <- rlang::call2(
|
||||
"separate_string",
|
||||
!!!parameters,
|
||||
.ns = "FreesearchR"
|
||||
)
|
||||
attr(out, "code") <- code
|
||||
out})
|
||||
|
||||
data_returned_r <- observeEvent(input$create, {
|
||||
rv$out <- data_split_r()
|
||||
})
|
||||
|
||||
return(reactive(rv$out))
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
#' @param title Modal title
|
||||
#' @param easyClose easyClose
|
||||
#' @param size size
|
||||
#' @param footer footer
|
||||
#'
|
||||
#' @returns shiny modal
|
||||
#' @export
|
||||
#'
|
||||
#' @name split-string
|
||||
modal_string_split <- function(id,
|
||||
title = i18n$t("Split character string"),
|
||||
easyClose = TRUE,
|
||||
size = "xl",
|
||||
footer = NULL) {
|
||||
ns <- NS(id)
|
||||
showModal(modalDialog(
|
||||
title = tagList(title, datamods:::button_close_modal()),
|
||||
string_split_ui(id),
|
||||
tags$div(
|
||||
style = "display: none;",
|
||||
textInput(inputId = ns("hidden"), label = NULL, value = datamods:::genId())
|
||||
),
|
||||
easyClose = easyClose,
|
||||
size = size,
|
||||
footer = footer
|
||||
))
|
||||
}
|
||||
|
||||
|
||||
### Helpers
|
||||
|
||||
#' Separate string wide or long
|
||||
#'
|
||||
#' @param data data
|
||||
#' @param col column
|
||||
#' @param delim delimiter
|
||||
#' @param direction target direction
|
||||
#'
|
||||
#' @returns data.frame
|
||||
#' @export
|
||||
#'
|
||||
separate_string <- function(data, col, delim, direction = c("wide", "long")) {
|
||||
direction <- match.arg(direction)
|
||||
|
||||
if (direction == "long") {
|
||||
out <- data |>
|
||||
dplyr::mutate(id_str_split = dplyr::row_number()) |>
|
||||
dplyr::group_by_at("id_str_split") |>
|
||||
tidyr::separate_longer_delim(cols = tidyselect::all_of(col), delim = delim) |>
|
||||
dplyr::mutate(instance_str_split = dplyr::row_number()) |>
|
||||
# add_instance(by="id")
|
||||
dplyr::ungroup() |>
|
||||
dplyr::mutate(dplyr::across(tidyselect::matches(col), trimws))
|
||||
} else if (direction == "wide") {
|
||||
## Experiment of wide to long
|
||||
|
||||
out <- data |>
|
||||
tidyr::separate_wider_delim(
|
||||
cols = tidyselect::all_of(col),
|
||||
delim = delim,
|
||||
names_sep = "_",
|
||||
too_few = "align_start"
|
||||
) |>
|
||||
dplyr::mutate(dplyr::across(tidyselect::starts_with(col), trimws))
|
||||
}
|
||||
|
||||
out
|
||||
}
|
||||
|
||||
|
||||
|
||||
#' Detect delimiters in string based on allowed delimiters
|
||||
#'
|
||||
#' @description
|
||||
#' Accepts any repeat of delimiters and includes surrounding whitespace
|
||||
#'
|
||||
#'
|
||||
#' @param text character vector
|
||||
#' @param delimiters allowed delimiters
|
||||
#'
|
||||
#' @returns character vector
|
||||
#' @export
|
||||
#'
|
||||
#' @examples
|
||||
#' sapply(c("Walk - run", "Sel__Re", "what;now"), detect_delimiter)
|
||||
detect_delimiter <- function(data, delimiters = c("_", "-", ";", "\n", ",")) {
|
||||
# Create patterns for each delimiter with potential surrounding whitespace
|
||||
patterns <- paste0("\\s*\\", delimiters, "+\\s*")
|
||||
|
||||
# Check each pattern
|
||||
out <- sapply(patterns, \(.x){
|
||||
if (grepl(.x, data)) {
|
||||
# Extract the actual matched delimiter with whitespace
|
||||
regmatches(data, regexpr(.x, data))
|
||||
}
|
||||
})
|
||||
|
||||
Reduce(c, out)
|
||||
}
|
||||
|
||||
|
||||
#' Determine if any variable in data frame character and contains recognized delimiters
|
||||
#'
|
||||
#' @param data vector or data.frame
|
||||
#'
|
||||
#' @returns logical
|
||||
#' @export
|
||||
#'
|
||||
#' @examples
|
||||
#' any(apply(mtcars, 2, is_splittable))
|
||||
#' is_splittable(mtcars)
|
||||
is_splittable <- function(data) {
|
||||
if (is.data.frame(data)) {
|
||||
return(apply(data, 2, is_splittable))
|
||||
}
|
||||
|
||||
if (is.character(data)) {
|
||||
if (length(Reduce(c, unique(sapply(data, detect_delimiter)))) > 0) {
|
||||
TRUE
|
||||
} else {
|
||||
FALSE
|
||||
}
|
||||
} else {
|
||||
FALSE
|
||||
}
|
||||
}
|
||||
|
||||
# mtcars |> simple_dt()
|
||||
simple_dt <- function(data,...){
|
||||
headerCallbackRemoveHeaderFooter <- c(
|
||||
"function(thead, data, start, end, display){",
|
||||
" $('th', thead).css('display', 'none');",
|
||||
"}"
|
||||
)
|
||||
|
||||
DT::datatable(
|
||||
data,
|
||||
options = list(
|
||||
dom = "t",
|
||||
ordering = FALSE,
|
||||
paging = FALSE,
|
||||
searching = FALSE,
|
||||
# headerCallback = DT::JS(headerCallbackRemoveHeaderFooter),
|
||||
columnDefs = list(
|
||||
list(
|
||||
targets = 1,
|
||||
render = DT::JS(
|
||||
"function(data, type, row, meta) {",
|
||||
"return type === 'display' && data.length > 10 ?",
|
||||
"'<span title=\"' + data + '\">' + data.substr(0, 10) + '...</span>' : data;",
|
||||
"}")))
|
||||
),
|
||||
selection = 'none',
|
||||
callback = DT::JS(
|
||||
"$('table.dataTable.no-footer').css('border-bottom', 'none');"
|
||||
),
|
||||
class = 'row-border',
|
||||
escape = FALSE,
|
||||
rownames = FALSE,
|
||||
# width = 500,
|
||||
filter = "none"
|
||||
)
|
||||
}
|
||||
BIN
R/sysdata.rda
BIN
R/sysdata.rda
Binary file not shown.
|
|
@ -99,7 +99,7 @@ ui_elements <- function(selection) {
|
|||
import_globalenv_ui(
|
||||
id = "env",
|
||||
title = NULL,
|
||||
packages = c("NHANES", "stRoke", "datasets")
|
||||
packages = c("NHANES", "stRoke", "datasets", "MASS")
|
||||
)
|
||||
),
|
||||
# shiny::conditionalPanel(
|
||||
|
|
@ -268,7 +268,7 @@ ui_elements <- function(selection) {
|
|||
shiny::tags$br(),
|
||||
shiny::fluidRow(
|
||||
shiny::column(
|
||||
width = 4,
|
||||
width = 3,
|
||||
shiny::actionButton(
|
||||
inputId = "modal_update",
|
||||
label = i18n$t("Reorder factor levels"),
|
||||
|
|
@ -280,7 +280,7 @@ ui_elements <- function(selection) {
|
|||
shiny::tags$br()
|
||||
),
|
||||
shiny::column(
|
||||
width = 4,
|
||||
width = 3,
|
||||
shiny::actionButton(
|
||||
inputId = "modal_cut",
|
||||
label = i18n$t("New factor"),
|
||||
|
|
@ -292,7 +292,19 @@ ui_elements <- function(selection) {
|
|||
shiny::tags$br()
|
||||
),
|
||||
shiny::column(
|
||||
width = 4,
|
||||
width = 3,
|
||||
shiny::actionButton(
|
||||
inputId = "modal_string",
|
||||
label = i18n$t("Split text"),
|
||||
width = "100%"
|
||||
),
|
||||
shiny::tags$br(),
|
||||
shiny::helpText(i18n$t("Split a text column by a recognised delimiter.")),
|
||||
shiny::tags$br(),
|
||||
shiny::tags$br()
|
||||
),
|
||||
shiny::column(
|
||||
width = 3,
|
||||
shiny::actionButton(
|
||||
inputId = "modal_column",
|
||||
label = i18n$t("New variable"),
|
||||
|
|
|
|||
10
SESSION.md
10
SESSION.md
|
|
@ -10,12 +10,12 @@
|
|||
|language |(EN) |
|
||||
|collate |en_US.UTF-8 |
|
||||
|ctype |en_US.UTF-8 |
|
||||
|tz |Africa/Dar_es_Salaam |
|
||||
|date |2025-10-27 |
|
||||
|tz |Europe/Copenhagen |
|
||||
|date |2025-10-31 |
|
||||
|rstudio |2025.05.0+496 Mariposa Orchid (desktop) |
|
||||
|pandoc |3.6.4 @ /opt/homebrew/bin/ (via rmarkdown) |
|
||||
|quarto |1.7.30 @ /usr/local/bin/quarto |
|
||||
|FreesearchR |25.10.4.251027 |
|
||||
|FreesearchR |25.10.5.251031 |
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
|
@ -54,6 +54,7 @@
|
|||
|colorspace |2.1-1 |2024-07-26 |CRAN (R 4.4.1) |
|
||||
|commonmark |2.0.0 |2025-07-07 |CRAN (R 4.4.1) |
|
||||
|crayon |1.5.3 |2024-06-20 |CRAN (R 4.4.1) |
|
||||
|crosstalk |1.2.1 |2023-11-23 |CRAN (R 4.4.0) |
|
||||
|curl |6.4.0 |2025-06-22 |RSPM (R 4.4.0) |
|
||||
|data.table |1.17.8 |2025-07-10 |CRAN (R 4.4.1) |
|
||||
|datamods |1.5.3 |2024-10-02 |CRAN (R 4.4.1) |
|
||||
|
|
@ -85,7 +86,7 @@
|
|||
|foreach |1.5.2 |2022-02-02 |CRAN (R 4.4.0) |
|
||||
|foreign |0.8-90 |2025-03-31 |CRAN (R 4.4.1) |
|
||||
|Formula |1.2-5 |2023-02-24 |CRAN (R 4.4.1) |
|
||||
|FreesearchR |25.10.4 |NA |NA |
|
||||
|FreesearchR |25.10.5 |NA |NA |
|
||||
|fs |1.6.6 |2025-04-12 |CRAN (R 4.4.1) |
|
||||
|gdtools |0.4.2 |2025-03-27 |CRAN (R 4.4.1) |
|
||||
|generics |0.1.4 |2025-05-09 |CRAN (R 4.4.1) |
|
||||
|
|
@ -227,6 +228,7 @@
|
|||
|uuid |1.2-1 |2024-07-29 |CRAN (R 4.4.1) |
|
||||
|V8 |6.0.6 |2025-08-18 |CRAN (R 4.4.1) |
|
||||
|vctrs |0.6.5 |2023-12-01 |CRAN (R 4.4.0) |
|
||||
|viridisLite |0.4.2 |2023-05-02 |CRAN (R 4.4.1) |
|
||||
|vroom |1.6.5 |2023-12-05 |CRAN (R 4.4.0) |
|
||||
|withr |3.0.2 |2024-10-28 |CRAN (R 4.4.1) |
|
||||
|writexl |1.5.4 |2025-04-15 |CRAN (R 4.4.1) |
|
||||
|
|
|
|||
850
app_docker/app.R
850
app_docker/app.R
File diff suppressed because it is too large
Load diff
|
|
@ -49,7 +49,6 @@
|
|||
"Column added!","Variabel oprettet!"
|
||||
"Unique values:","Unikke værdier:"
|
||||
"Variable to cut:","Variabel, der skal deles:"
|
||||
"Number of breaks:","Antal niveauer:"
|
||||
"Close intervals on the right","Luk intervaller til højre"
|
||||
"Include lowest value","Inkluderer den laveste værdi"
|
||||
"Create factor variable","Opret kategorisk variabel"
|
||||
|
|
@ -255,20 +254,40 @@
|
|||
"Choose a name for the column to be created or modified, then enter an expression before clicking on the button below to create the variable, or cancel to exit without saving anything.","Vælg et navn til den nye variabel, skriv din formel og tryk så på knappen for at gemme variablen, eller annuler for at lukke uden at gemme."
|
||||
"Please fill in web address and API token, then press 'Connect'.","Udfyld serveradresse og API-nøgle, og tryk så 'Fobind'."
|
||||
"Other","Other"
|
||||
"Hour of the day","Hour of the day"
|
||||
"Breaks","Breaks"
|
||||
"By day of the week","By day of the week"
|
||||
"By weekday","By weekday"
|
||||
"By week number and year","By week number and year"
|
||||
"By month and year","By month and year"
|
||||
"By month only","By month only"
|
||||
"By quarter of the year","By quarter of the year"
|
||||
"By year","By year"
|
||||
"Keep only most common","Keep only most common"
|
||||
"Number","Number"
|
||||
"Combine below percentage","Combine below percentage"
|
||||
"Percentage","Percentage"
|
||||
"By specified numbers","By specified numbers"
|
||||
"By quantiles (groups of equal size)","By quantiles (groups of equal size)"
|
||||
"By week number","By week number"
|
||||
"There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data.","There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data."
|
||||
"Hour of the day","Time på dagen"
|
||||
"Breaks","Grupper"
|
||||
"By day of the week","Efter ugedag"
|
||||
"By weekday","Efter ugedag"
|
||||
"By week number and year","Efter ugenummer og årstal"
|
||||
"By month and year","Efter måned og årstal"
|
||||
"By month only","Efter måned alene"
|
||||
"By quarter of the year","Efter kvartal"
|
||||
"By year","Efter år"
|
||||
"Keep only most common","Behold kun de hyppigste"
|
||||
"Number","Antal"
|
||||
"Combine below percentage","Kombiner under procentsats"
|
||||
"Percentage","Procentsats"
|
||||
"By specified numbers","Efter specifikke værdier"
|
||||
"By quantiles (groups of equal size)","I grupper af samme størrelse"
|
||||
"By week number","Efter ugenummer alene"
|
||||
"There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data.","Der er mere avancerede muligheder for at ændre kategoriske variable, oprette nye kategoriske variabler fra eksisterende data eller nye variable baseret på R-kode. Nederst kan du gendanne originale data."
|
||||
"Split the variable","Split the variable"
|
||||
"Original data","Original data"
|
||||
"Preview of result","Preview of result"
|
||||
"No character variables with accepted delimiters detected.","No character variables with accepted delimiters detected."
|
||||
"Variable to split:","Variable to split:"
|
||||
"Text or character to split string by","Text or character to split string by"
|
||||
"Select delimiter","Select delimiter"
|
||||
"Direction:","Direction:"
|
||||
"Split string to multiple columns. Keep number of rows.","Split string to multiple columns. Keep number of rows."
|
||||
"Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Split string to multiple observations (rows) in the same column. Also ads id and instance columns"
|
||||
"Browse data preview","Browse data preview"
|
||||
"Split character string","Split character string"
|
||||
"Split text","Split text"
|
||||
"Split a text column by a recognised delimiter.","Split a text column by a recognised delimiter."
|
||||
"Split a character string by a common delimiter","Split a character string by a common delimiter"
|
||||
"Apply split","Apply split"
|
||||
"Stacked relative barplot","Stacked relative barplot"
|
||||
"Create relative stacked barplots to show the distribution of categorical levels","Create relative stacked barplots to show the distribution of categorical levels"
|
||||
"Side-by-side barplot","Side-by-side barplot"
|
||||
"Create side-by-side barplot to show the distribution of categorical levels","Create side-by-side barplot to show the distribution of categorical levels"
|
||||
|
|
|
|||
|
|
|
@ -18,7 +18,6 @@
|
|||
"Column added!","Column added!"
|
||||
"Unique values:","Unique values:"
|
||||
"Variable to cut:","Variable to cut:"
|
||||
"Number of breaks:","Number of breaks:"
|
||||
"Close intervals on the right","Close intervals on the right"
|
||||
"Include lowest value","Include lowest value"
|
||||
"Create factor variable","Create factor variable"
|
||||
|
|
@ -272,3 +271,23 @@
|
|||
"Generating the report. Hold on for a moment..","Generating the report. Hold on for a moment.."
|
||||
"We encountered the following error creating your report:","We encountered the following error creating your report:"
|
||||
"There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data.","There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data."
|
||||
"Text or character to split string by","Text or character to split string by"
|
||||
"Split the variable","Split the variable"
|
||||
"Variable to split:","Variable to split:"
|
||||
"Direction:","Direction:"
|
||||
"Split string to multiple columns. Keep number of rows.","Split string to multiple columns. Keep number of rows."
|
||||
"Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Split string to multiple observations (rows) in the same column. Also ads id and instance columns"
|
||||
"Split character string","Split character string"
|
||||
"Split text","Split text"
|
||||
"Split a character string by a common delimiter","Split a character string by a common delimiter"
|
||||
"Select delimiter","Select delimiter"
|
||||
"Browse data preview","Browse data preview"
|
||||
"Original data","Original data"
|
||||
"Preview of result","Preview of result"
|
||||
"No character variables with accepted delimiters detected.","No character variables with accepted delimiters detected."
|
||||
"Split a text column by a recognised delimiter.","Split a text column by a recognised delimiter."
|
||||
"Apply split","Apply split"
|
||||
"Stacked relative barplot","Stacked relative barplot"
|
||||
"Create relative stacked barplots to show the distribution of categorical levels","Create relative stacked barplots to show the distribution of categorical levels"
|
||||
"Side-by-side barplot","Side-by-side barplot"
|
||||
"Create side-by-side barplot to show the distribution of categorical levels","Create side-by-side barplot to show the distribution of categorical levels"
|
||||
|
|
|
|||
|
293
app_docker/translations/translation_sv.csv
Normal file
293
app_docker/translations/translation_sv.csv
Normal file
|
|
@ -0,0 +1,293 @@
|
|||
"en","sv"
|
||||
"Hello","Hei"
|
||||
"The following variable pairs are highly correlated: {sentence_paste(.x,and_str)}.\nConsider excluding one {more}from the dataset to ensure variables are independent.","The following variable pairs are highly correlated: {sentence_paste(.x,and_str)}.\nConsider excluding one {more}from the dataset to ensure variables are independent."
|
||||
"No variables have a correlation measure above the threshold.","No variables have a correlation measure above the threshold."
|
||||
"and","and"
|
||||
"The following error occured on determining correlations:","The following error occured on determining correlations:"
|
||||
"from each pair","from each pair"
|
||||
"New column name:","New column name:"
|
||||
"Group calculation by:","Group calculation by:"
|
||||
"Enter an expression to define new column:","Enter an expression to define new column:"
|
||||
"Click on a column name to add it to the expression:","Click on a column name to add it to the expression:"
|
||||
"Create column","Create column"
|
||||
"Cancel","Cancel"
|
||||
"Choose a name for the column to be created or modified, then enter an expression before clicking on the button below to create the variable, or cancel to exit without saving anything.","Choose a name for the column to be created or modified, then enter an expression before clicking on the button below to create the variable, or cancel to exit without saving anything."
|
||||
"New column name cannot be empty","New column name cannot be empty"
|
||||
"Create a new column","Create a new column"
|
||||
"Some operations are not allowed","Some operations are not allowed"
|
||||
"Column added!","Column added!"
|
||||
"Unique values:","Unique values:"
|
||||
"Variable to cut:","Variable to cut:"
|
||||
"Close intervals on the right","Close intervals on the right"
|
||||
"Include lowest value","Include lowest value"
|
||||
"Create factor variable","Create factor variable"
|
||||
"Fixed breaks:","Fixed breaks:"
|
||||
"Method:","Method:"
|
||||
"Other","Other"
|
||||
"Convert Numeric to Factor","Convert Numeric to Factor"
|
||||
"Hour of the day","Hour of the day"
|
||||
"Breaks","Breaks"
|
||||
"By day of the week","By day of the week"
|
||||
"By weekday","By weekday"
|
||||
"By week number and year","By week number and year"
|
||||
"By week number","By week number"
|
||||
"By month and year","By month and year"
|
||||
"By month only","By month only"
|
||||
"By quarter of the year","By quarter of the year"
|
||||
"By year","By year"
|
||||
"Keep only most common","Keep only most common"
|
||||
"Number","Number"
|
||||
"Combine below percentage","Combine below percentage"
|
||||
"Percentage","Percentage"
|
||||
"By specified numbers","By specified numbers"
|
||||
"By quantiles (groups of equal size)","By quantiles (groups of equal size)"
|
||||
"Only non-text variables are available for plotting. Go the ""Data"" to reclass data to plot.","Only non-text variables are available for plotting. Go the ""Data"" to reclass data to plot."
|
||||
"Plot","Plot"
|
||||
"Adjust settings, then press ""Plot"".","Adjust settings, then press ""Plot""."
|
||||
"Plot height (mm)","Plot height (mm)"
|
||||
"Plot width (mm)","Plot width (mm)"
|
||||
"File format","File format"
|
||||
"Download plot","Download plot"
|
||||
"Create plot","Create plot"
|
||||
"Download","Download"
|
||||
"Select variable","Select variable"
|
||||
"Response variable","Response variable"
|
||||
"Plot type","Plot type"
|
||||
"Please select","Please select"
|
||||
"Additional variables","Additional variables"
|
||||
"Secondary variable","Secondary variable"
|
||||
"No variable","No variable"
|
||||
"Grouping variable","Grouping variable"
|
||||
"No stratification","No stratification"
|
||||
"Drawing the plot. Hold tight for a moment..","Drawing the plot. Hold tight for a moment.."
|
||||
"#Plotting\n","#Plotting\n"
|
||||
"Stacked horizontal bars","Stacked horizontal bars"
|
||||
"A classical way of visualising the distribution of an ordinal scale like the modified Ranking Scale and known as Grotta bars","A classical way of visualising the distribution of an ordinal scale like the modified Ranking Scale and known as Grotta bars"
|
||||
"Violin plot","Violin plot"
|
||||
"A modern alternative to the classic boxplot to visualise data distribution","A modern alternative to the classic boxplot to visualise data distribution"
|
||||
"Sankey plot","Sankey plot"
|
||||
"A way of visualising change between groups","A way of visualising change between groups"
|
||||
"Scatter plot","Scatter plot"
|
||||
"A classic way of showing the association between to variables","A classic way of showing the association between to variables"
|
||||
"Box plot","Box plot"
|
||||
"A classic way to plot data distribution by groups","A classic way to plot data distribution by groups"
|
||||
"Euler diagram","Euler diagram"
|
||||
"Generate area-proportional Euler diagrams to display set relationships","Generate area-proportional Euler diagrams to display set relationships"
|
||||
"Unique:","Unique:"
|
||||
"Missing:","Missing:"
|
||||
"Most Common:","Most Common:"
|
||||
"Min:","Min:"
|
||||
"Mean:","Mean:"
|
||||
"Median:","Median:"
|
||||
"Max:","Max:"
|
||||
"{data_text} has {n} observations and {n_var} variables, with {n_complete} ({p_complete} %) complete cases.","{data_text} has {n} observations and {n_var} variables, with {n_complete} ({p_complete} %) complete cases."
|
||||
"Import a dataset from an environment","Import a dataset from an environment"
|
||||
"Select a data source:","Select a data source:"
|
||||
"Select source","Select source"
|
||||
"Select a dataset:","Select a dataset:"
|
||||
"List of datasets...","List of datasets..."
|
||||
"No data selected!","No data selected!"
|
||||
"Use a dataset from your environment or from the environment of a package.","Use a dataset from your environment or from the environment of a package."
|
||||
"No dataset here...","No dataset here..."
|
||||
"Imported data","Imported data"
|
||||
"Not a data.frame","Not a data.frame"
|
||||
"Rows to skip before reading data:","Rows to skip before reading data:"
|
||||
"Missing values character(s):","Missing values character(s):"
|
||||
"if several use a comma (',') to separate them","if several use a comma (',') to separate them"
|
||||
"Decimal separator:","Decimal separator:"
|
||||
"Encoding:","Encoding:"
|
||||
"Upload a file:","Upload a file:"
|
||||
"Browse...","Browse..."
|
||||
"Select sheet to import:","Select sheet to import:"
|
||||
"No file selected.","No file selected."
|
||||
"You can choose between these file types:","You can choose between these file types:"
|
||||
"You can import {file_extensions_text} files","You can import {file_extensions_text} files"
|
||||
"First five rows are shown below:","First five rows are shown below:"
|
||||
"No variable chosen for analysis","No variable chosen for analysis"
|
||||
"No missing observations","No missing observations"
|
||||
"Missing vs non-missing observations in the variable **'{variabler()}'**","Missing vs non-missing observations in the variable **'{variabler()}'**"
|
||||
"Grouped by {get_label(data,ter)}","Grouped by {get_label(data,ter)}"
|
||||
"Import data from REDCap","Import data from REDCap"
|
||||
"REDCap server","REDCap server"
|
||||
"Web address","Web address"
|
||||
"Format should be either 'https://redcap.your.institution/' or 'https://your.institution/redcap/'","Format should be either 'https://redcap.your.institution/' or 'https://your.institution/redcap/'"
|
||||
"API token","API token"
|
||||
"The token is a string of 32 numbers and letters.","The token is a string of 32 numbers and letters."
|
||||
"Connect","Connect"
|
||||
"Please fill in web address and API token, then press 'Connect'.","Please fill in web address and API token, then press 'Connect'."
|
||||
"Data import parameters","Data import parameters"
|
||||
"Select fields/variables to import and click the funnel to apply optional filters","Select fields/variables to import and click the funnel to apply optional filters"
|
||||
"Import","Import"
|
||||
"Click to see data dictionary","Click to see data dictionary"
|
||||
"Connected to server!","Connected to server!"
|
||||
"The {data_rv$info$project_title} project is loaded.","The {data_rv$info$project_title} project is loaded."
|
||||
"Data dictionary","Data dictionary"
|
||||
"Preview:","Preview:"
|
||||
"Imported data set","Imported data set"
|
||||
"Select fields/variables to import:","Select fields/variables to import:"
|
||||
"Specify the data format","Specify the data format"
|
||||
"Fill missing values?","Fill missing values?"
|
||||
"Requested data was retrieved!","Requested data was retrieved!"
|
||||
"Data retrieved, but it looks like only the ID was retrieved from the server. Please check with your REDCap administrator that you have required permissions for data access.","Data retrieved, but it looks like only the ID was retrieved from the server. Please check with your REDCap administrator that you have required permissions for data access."
|
||||
"Data retrieved, but it looks like not all requested fields were retrieved from the server. Please check with your REDCap administrator that you have required permissions for data access.","Data retrieved, but it looks like not all requested fields were retrieved from the server. Please check with your REDCap administrator that you have required permissions for data access."
|
||||
"Click to see the imported data","Click to see the imported data"
|
||||
"Regression table","Regression table"
|
||||
"Regression","Regression"
|
||||
"Specify covariables","Specify covariables"
|
||||
"If none are selected, all are included.","If none are selected, all are included."
|
||||
"Analyse","Analyse"
|
||||
"Working...","Working..."
|
||||
"Press 'Analyse' to create the regression model and after changing parameters.","Press 'Analyse' to create the regression model and after changing parameters."
|
||||
"Coefficient plot","Coefficient plot"
|
||||
"Model checks","Model checks"
|
||||
"Coefficients plot","Coefficients plot"
|
||||
"Checks","Checks"
|
||||
"Yes","Yes"
|
||||
"No","No"
|
||||
"Show p-value","Show p-value"
|
||||
"Select outcome variable","Select outcome variable"
|
||||
"Choose regression analysis","Choose regression analysis"
|
||||
"Covariables to format as categorical","Covariables to format as categorical"
|
||||
"Select variable to stratify baseline","Select variable to stratify baseline"
|
||||
"Select models to plot","Select models to plot"
|
||||
"Creating regression models failed with the following error:","Creating regression models failed with the following error:"
|
||||
"Creating a regression table failed with the following error:","Creating a regression table failed with the following error:"
|
||||
"Saving the plot. Hold on for a moment..","Saving the plot. Hold on for a moment.."
|
||||
"Running model assumptions checks failed with the following error:","Running model assumptions checks failed with the following error:"
|
||||
"Select checks to plot","Select checks to plot"
|
||||
"Multivariable regression model checks","Multivariable regression model checks"
|
||||
"www/intro.html","www/intro.html"
|
||||
"www/intro.md","www/intro.md"
|
||||
"Get started","Get started"
|
||||
"Choose your data","Choose your data"
|
||||
"Upload a file, get data directly from REDCap or use local or sample data.","Upload a file, get data directly from REDCap or use local or sample data."
|
||||
"Please be mindfull handling sensitive data","Please be mindfull handling sensitive data"
|
||||
"<p>The <em><strong>FreesearchR</strong></em> app only stores data for analyses, but please only use with sensitive data when running locally. <a href='https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine'>Read more here</a></p>","<p>The <em><strong>FreesearchR</strong></em> app only stores data for analyses, but please only use with sensitive data when running locally. <a href='https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine'>Read more here</a></p>"
|
||||
"Quick overview","Quick overview"
|
||||
"Select variables for final import","Select variables for final import"
|
||||
"Exclude incomplete variables:","Exclude incomplete variables:"
|
||||
"At 0, only complete variables are included; at 100, all variables are included.","At 0, only complete variables are included; at 100, all variables are included."
|
||||
"Manual selection:","Manual selection:"
|
||||
"Let's begin!","Let's begin!"
|
||||
"Prepare","Prepare"
|
||||
"Overview and filter","Overview and filter"
|
||||
"Overview and filtering","Overview and filtering"
|
||||
"Below you find a summary table for quick insigths, and on the right you can visualise data classes, browse observations and apply different data filters.","Below you find a summary table for quick insigths, and on the right you can visualise data classes, browse observations and apply different data filters."
|
||||
"Visual overview","Visual overview"
|
||||
"Browse observations","Browse observations"
|
||||
"Filter data types","Filter data types"
|
||||
"Filter observations","Filter observations"
|
||||
"Apply filter on observation","Apply filter on observation"
|
||||
"Edit and create data","Edit and create data"
|
||||
"Subset, rename and convert variables","Subset, rename and convert variables"
|
||||
"Below, are several options for simple data manipulation like update variables by renaming, creating new labels (for nicer tables in the report) and changing variable classes (numeric, factor/categorical etc.).","Below, are several options for simple data manipulation like update variables by renaming, creating new labels (for nicer tables in the report) and changing variable classes (numeric, factor/categorical etc.)."
|
||||
"Please note that data modifications are applied before any filtering.","Please note that data modifications are applied before any filtering."
|
||||
"Advanced data manipulation","Advanced data manipulation"
|
||||
"Below options allow more advanced varaible manipulations.","Below options allow more advanced varaible manipulations."
|
||||
"Reorder factor levels","Reorder factor levels"
|
||||
"Reorder the levels of factor/categorical variables.","Reorder the levels of factor/categorical variables."
|
||||
"New factor","New factor"
|
||||
"Create factor/categorical variable from a continous variable (number/date/time).","Create factor/categorical variable from a continous variable (number/date/time)."
|
||||
"New variable","New variable"
|
||||
"Create a new variable based on an R-expression.","Create a new variable based on an R-expression."
|
||||
"Compare modified data to original","Compare modified data to original"
|
||||
"Raw print of the original vs the modified data.","Raw print of the original vs the modified data."
|
||||
"Original data:","Original data:"
|
||||
"Modified data:","Modified data:"
|
||||
"Restore original data","Restore original data"
|
||||
"Reset to original imported dataset. Careful! There is no un-doing.","Reset to original imported dataset. Careful! There is no un-doing."
|
||||
"Evaluate","Evaluate"
|
||||
"Characteristics","Characteristics"
|
||||
"Only factor/categorical variables are available for stratification. Go back to the 'Prepare' tab to reclass a variable if it's not on the list.","Only factor/categorical variables are available for stratification. Go back to the 'Prepare' tab to reclass a variable if it's not on the list."
|
||||
"Compare strata?","Compare strata?"
|
||||
"Option to perform statistical comparisons between strata in baseline table.","Option to perform statistical comparisons between strata in baseline table."
|
||||
"Press 'Evaluate' to create the comparison table.","Press 'Evaluate' to create the comparison table."
|
||||
"Correlations","Correlations"
|
||||
"To avoid evaluating the correlation of the outcome variable, this can be excluded from the plot or select 'none'.","To avoid evaluating the correlation of the outcome variable, this can be excluded from the plot or select 'none'."
|
||||
"Correlation cut-off","Correlation cut-off"
|
||||
"Set the cut-off for considered 'highly correlated'.","Set the cut-off for considered 'highly correlated'."
|
||||
"Missings","Missings"
|
||||
"To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random.","To consider if data is missing by random, choose the outcome/dependent variable (only variables with any missings are available). If there is a significant difference across other variables depending on missing observations, it may not be missing at random."
|
||||
"Visuals","Visuals"
|
||||
"Analysis validation","Analysis validation"
|
||||
"Report","Report"
|
||||
"Choose your favourite output file format for further work, and download, when the analyses are done.","Choose your favourite output file format for further work, and download, when the analyses are done."
|
||||
"Factor variable to reorder:","Factor variable to reorder:"
|
||||
"Sort by levels","Sort by levels"
|
||||
"Sort by count","Sort by count"
|
||||
"Create a new variable (otherwise replaces the one selected)","Create a new variable (otherwise replaces the one selected)"
|
||||
"Update factor variable","Update factor variable"
|
||||
"Sort count","Sort count"
|
||||
"Levels","Levels"
|
||||
"Count","Count"
|
||||
"Update levels of a factor","Update levels of a factor"
|
||||
"Update & select variables","Update & select variables"
|
||||
"Date format:","Date format:"
|
||||
"Date to use as origin to convert date/datetime:","Date to use as origin to convert date/datetime:"
|
||||
"Apply changes","Apply changes"
|
||||
"No data to display.","No data to display."
|
||||
"Data successfully updated!","Data successfully updated!"
|
||||
"You removed {p_out} % of observations.","You removed {p_out} % of observations."
|
||||
"You removed {p_out} % of variables.","You removed {p_out} % of variables."
|
||||
"There is a total of {p_miss} % missing observations.","There is a total of {p_miss} % missing observations."
|
||||
"There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}.","There is a significant correlation between {n_nonmcar} variables and missing observations in the outcome variable {outcome}."
|
||||
"Data includes {n_pairs} pairs of highly correlated variables.","Data includes {n_pairs} pairs of highly correlated variables."
|
||||
"Class","Class"
|
||||
"Observations","Observations"
|
||||
"File upload","File upload"
|
||||
"REDCap server export","REDCap server export"
|
||||
"Local or sample data","Local or sample data"
|
||||
"Data is only stored for analyses and deleted when the app is closed.","Data is only stored for analyses and deleted when the app is closed."
|
||||
"Consider [running ***FreesearchR*** locally](https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine) if working with sensitive data.","Consider [running ***FreesearchR*** locally](https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine) if working with sensitive data."
|
||||
"Documentation","Documentation"
|
||||
"Feedback","Feedback"
|
||||
"License: AGPLv3","License: AGPLv3"
|
||||
"Source","Source"
|
||||
"Settings","Settings"
|
||||
"The ***FreesearchR*** app only stores data for analyses, but please only use with sensitive data when running locally. [Read more here](https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine).","The ***FreesearchR*** app only stores data for analyses, but please only use with sensitive data when running locally. [Read more here](https://agdamsbo.github.io/FreesearchR/#run-locally-on-your-own-machine)."
|
||||
"Data classes and missing observations","Data classes and missing observations"
|
||||
"We encountered the following error showing missingness:","We encountered the following error showing missingness:"
|
||||
"Please confirm data reset!","Please confirm data reset!"
|
||||
"Sure you want to reset data? This cannot be undone.","Sure you want to reset data? This cannot be undone."
|
||||
"Confirm","Confirm"
|
||||
"The filtered data","The filtered data"
|
||||
"Create new factor","Create new factor"
|
||||
"This window is aimed at advanced users and require some *R*-experience!","This window is aimed at advanced users and require some *R*-experience!"
|
||||
"Create new variables","Create new variables"
|
||||
"Select data types to include","Select data types to include"
|
||||
"Uploaded data overview","Uploaded data overview"
|
||||
"We encountered the following error browsing your data:","We encountered the following error browsing your data:"
|
||||
"Here is an overview of how your data is interpreted, and where data is missing. Use this information to consider if data is missing at random or if some observations are missing systematically wich may be caused by an observation bias.","Here is an overview of how your data is interpreted, and where data is missing. Use this information to consider if data is missing at random or if some observations are missing systematically wich may be caused by an observation bias."
|
||||
"Data import","Data import"
|
||||
"Data import formatting","Data import formatting"
|
||||
"Data modifications","Data modifications"
|
||||
"Variables filter","Variables filter"
|
||||
"Data filter","Data filter"
|
||||
"Data characteristics table","Data characteristics table"
|
||||
"The dataset without text variables","The dataset without text variables"
|
||||
"The data includes {n_col} variables. Please limit to 100.","The data includes {n_col} variables. Please limit to 100."
|
||||
"Creating the table. Hold on for a moment..","Creating the table. Hold on for a moment.."
|
||||
"Select variable to stratify analysis","Select variable to stratify analysis"
|
||||
"Generating the report. Hold on for a moment..","Generating the report. Hold on for a moment.."
|
||||
"We encountered the following error creating your report:","We encountered the following error creating your report:"
|
||||
"There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data.","There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data."
|
||||
"Text or character to split string by","Text or character to split string by"
|
||||
"Split the variable","Split the variable"
|
||||
"Variable to split:","Variable to split:"
|
||||
"Direction:","Direction:"
|
||||
"Split string to multiple columns. Keep number of rows.","Split string to multiple columns. Keep number of rows."
|
||||
"Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Split string to multiple observations (rows) in the same column. Also ads id and instance columns"
|
||||
"Split character string","Split character string"
|
||||
"Split text","Split text"
|
||||
"Split a character string by a common delimiter","Split a character string by a common delimiter"
|
||||
"Select delimiter","Select delimiter"
|
||||
"Browse data preview","Browse data preview"
|
||||
"Original data","Original data"
|
||||
"Preview of result","Preview of result"
|
||||
"No character variables with accepted delimiters detected.","No character variables with accepted delimiters detected."
|
||||
"Split a text column by a recognised delimiter.","Split a text column by a recognised delimiter."
|
||||
"Apply split","Apply split"
|
||||
"Stacked relative barplot","Stacked relative barplot"
|
||||
"Create relative stacked barplots to show the distribution of categorical levels","Create relative stacked barplots to show the distribution of categorical levels"
|
||||
"Side-by-side barplot","Side-by-side barplot"
|
||||
"Create side-by-side barplot to show the distribution of categorical levels","Create side-by-side barplot to show the distribution of categorical levels"
|
||||
|
|
|
@ -49,7 +49,6 @@
|
|||
"Column added!","Column added!"
|
||||
"Unique values:","Unique values:"
|
||||
"Variable to cut:","Variable to cut:"
|
||||
"Number of breaks:","Number of breaks:"
|
||||
"Close intervals on the right","Close intervals on the right"
|
||||
"Include lowest value","Include lowest value"
|
||||
"Create factor variable","Create factor variable"
|
||||
|
|
@ -272,3 +271,23 @@
|
|||
"By quantiles (groups of equal size)","By quantiles (groups of equal size)"
|
||||
"Please fill in web address and API token, then press 'Connect'.","Please fill in web address and API token, then press 'Connect'."
|
||||
"There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data.","There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data."
|
||||
"Text or character to split string by","Text or character to split string by"
|
||||
"Split the variable","Split the variable"
|
||||
"Variable to split:","Variable to split:"
|
||||
"Direction:","Direction:"
|
||||
"Split string to multiple columns. Keep number of rows.","Split string to multiple columns. Keep number of rows."
|
||||
"Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Split string to multiple observations (rows) in the same column. Also ads id and instance columns"
|
||||
"Split character string","Split character string"
|
||||
"Split text","Split text"
|
||||
"Split a character string by a common delimiter","Split a character string by a common delimiter"
|
||||
"Select delimiter","Select delimiter"
|
||||
"Browse data preview","Browse data preview"
|
||||
"Original data","Original data"
|
||||
"Preview of result","Preview of result"
|
||||
"No character variables with accepted delimiters detected.","No character variables with accepted delimiters detected."
|
||||
"Split a text column by a recognised delimiter.","Split a text column by a recognised delimiter."
|
||||
"Apply split","Apply split"
|
||||
"Stacked relative barplot","Stacked relative barplot"
|
||||
"Create relative stacked barplots to show the distribution of categorical levels","Create relative stacked barplots to show the distribution of categorical levels"
|
||||
"Side-by-side barplot","Side-by-side barplot"
|
||||
"Create side-by-side barplot to show the distribution of categorical levels","Create side-by-side barplot to show the distribution of categorical levels"
|
||||
|
|
|
|||
|
54
examples/string_split_demo.R
Normal file
54
examples/string_split_demo.R
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
library(shiny)
|
||||
library(reactable)
|
||||
|
||||
ui <- fluidPage(
|
||||
theme = bslib::bs_theme(version = 5L, preset = "bootstrap"),
|
||||
shinyWidgets::html_dependency_winbox(),
|
||||
tags$h2("Split string"),
|
||||
fluidRow(
|
||||
column(
|
||||
width = 4,
|
||||
actionButton("modal", "Or click here to open a modal to create a column")
|
||||
),
|
||||
column(
|
||||
width = 8,
|
||||
reactableOutput(outputId = "table"),
|
||||
verbatimTextOutput("code")
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
server <- function(input, output, session) {
|
||||
rv <- reactiveValues(
|
||||
data = MASS::Cars93[, c(1, 3, 4, 5, 6, 10)],
|
||||
out = NULL
|
||||
)
|
||||
|
||||
# modal window mode
|
||||
observeEvent(input$modal, modal_string_split("modal"))
|
||||
|
||||
rv$out <- create_column_server(
|
||||
id = "modal",
|
||||
data_r = reactive(rv$data)
|
||||
)
|
||||
|
||||
|
||||
# Show result
|
||||
output$table <- renderReactable({
|
||||
data <- req(rv$data)
|
||||
reactable(
|
||||
data = data,
|
||||
bordered = TRUE,
|
||||
compact = TRUE,
|
||||
striped = TRUE
|
||||
)
|
||||
})
|
||||
|
||||
output$code <- renderPrint({
|
||||
attr(rv$data, "code")
|
||||
})
|
||||
}
|
||||
|
||||
if (interactive()) {
|
||||
shinyApp(ui, server)
|
||||
}
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -49,7 +49,6 @@
|
|||
"Column added!","Variabel oprettet!"
|
||||
"Unique values:","Unikke værdier:"
|
||||
"Variable to cut:","Variabel, der skal deles:"
|
||||
"Number of breaks:","Antal niveauer:"
|
||||
"Close intervals on the right","Luk intervaller til højre"
|
||||
"Include lowest value","Inkluderer den laveste værdi"
|
||||
"Create factor variable","Opret kategorisk variabel"
|
||||
|
|
@ -255,20 +254,40 @@
|
|||
"Choose a name for the column to be created or modified, then enter an expression before clicking on the button below to create the variable, or cancel to exit without saving anything.","Vælg et navn til den nye variabel, skriv din formel og tryk så på knappen for at gemme variablen, eller annuler for at lukke uden at gemme."
|
||||
"Please fill in web address and API token, then press 'Connect'.","Udfyld serveradresse og API-nøgle, og tryk så 'Fobind'."
|
||||
"Other","Other"
|
||||
"Hour of the day","Hour of the day"
|
||||
"Breaks","Breaks"
|
||||
"By day of the week","By day of the week"
|
||||
"By weekday","By weekday"
|
||||
"By week number and year","By week number and year"
|
||||
"By month and year","By month and year"
|
||||
"By month only","By month only"
|
||||
"By quarter of the year","By quarter of the year"
|
||||
"By year","By year"
|
||||
"Keep only most common","Keep only most common"
|
||||
"Number","Number"
|
||||
"Combine below percentage","Combine below percentage"
|
||||
"Percentage","Percentage"
|
||||
"By specified numbers","By specified numbers"
|
||||
"By quantiles (groups of equal size)","By quantiles (groups of equal size)"
|
||||
"By week number","By week number"
|
||||
"There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data.","There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data."
|
||||
"Hour of the day","Time på dagen"
|
||||
"Breaks","Grupper"
|
||||
"By day of the week","Efter ugedag"
|
||||
"By weekday","Efter ugedag"
|
||||
"By week number and year","Efter ugenummer og årstal"
|
||||
"By month and year","Efter måned og årstal"
|
||||
"By month only","Efter måned alene"
|
||||
"By quarter of the year","Efter kvartal"
|
||||
"By year","Efter år"
|
||||
"Keep only most common","Behold kun de hyppigste"
|
||||
"Number","Antal"
|
||||
"Combine below percentage","Kombiner under procentsats"
|
||||
"Percentage","Procentsats"
|
||||
"By specified numbers","Efter specifikke værdier"
|
||||
"By quantiles (groups of equal size)","I grupper af samme størrelse"
|
||||
"By week number","Efter ugenummer alene"
|
||||
"There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data.","Der er mere avancerede muligheder for at ændre kategoriske variable, oprette nye kategoriske variabler fra eksisterende data eller nye variable baseret på R-kode. Nederst kan du gendanne originale data."
|
||||
"Split the variable","Split the variable"
|
||||
"Original data","Original data"
|
||||
"Preview of result","Preview of result"
|
||||
"No character variables with accepted delimiters detected.","No character variables with accepted delimiters detected."
|
||||
"Variable to split:","Variable to split:"
|
||||
"Text or character to split string by","Text or character to split string by"
|
||||
"Select delimiter","Select delimiter"
|
||||
"Direction:","Direction:"
|
||||
"Split string to multiple columns. Keep number of rows.","Split string to multiple columns. Keep number of rows."
|
||||
"Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Split string to multiple observations (rows) in the same column. Also ads id and instance columns"
|
||||
"Browse data preview","Browse data preview"
|
||||
"Split character string","Split character string"
|
||||
"Split text","Split text"
|
||||
"Split a text column by a recognised delimiter.","Split a text column by a recognised delimiter."
|
||||
"Split a character string by a common delimiter","Split a character string by a common delimiter"
|
||||
"Apply split","Apply split"
|
||||
"Stacked relative barplot","Stacked relative barplot"
|
||||
"Create relative stacked barplots to show the distribution of categorical levels","Create relative stacked barplots to show the distribution of categorical levels"
|
||||
"Side-by-side barplot","Side-by-side barplot"
|
||||
"Create side-by-side barplot to show the distribution of categorical levels","Create side-by-side barplot to show the distribution of categorical levels"
|
||||
|
|
|
|||
|
|
|
@ -18,7 +18,6 @@
|
|||
"Column added!","Column added!"
|
||||
"Unique values:","Unique values:"
|
||||
"Variable to cut:","Variable to cut:"
|
||||
"Number of breaks:","Number of breaks:"
|
||||
"Close intervals on the right","Close intervals on the right"
|
||||
"Include lowest value","Include lowest value"
|
||||
"Create factor variable","Create factor variable"
|
||||
|
|
@ -272,3 +271,23 @@
|
|||
"Generating the report. Hold on for a moment..","Generating the report. Hold on for a moment.."
|
||||
"We encountered the following error creating your report:","We encountered the following error creating your report:"
|
||||
"There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data.","There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data."
|
||||
"Text or character to split string by","Text or character to split string by"
|
||||
"Split the variable","Split the variable"
|
||||
"Variable to split:","Variable to split:"
|
||||
"Direction:","Direction:"
|
||||
"Split string to multiple columns. Keep number of rows.","Split string to multiple columns. Keep number of rows."
|
||||
"Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Split string to multiple observations (rows) in the same column. Also ads id and instance columns"
|
||||
"Split character string","Split character string"
|
||||
"Split text","Split text"
|
||||
"Split a character string by a common delimiter","Split a character string by a common delimiter"
|
||||
"Select delimiter","Select delimiter"
|
||||
"Browse data preview","Browse data preview"
|
||||
"Original data","Original data"
|
||||
"Preview of result","Preview of result"
|
||||
"No character variables with accepted delimiters detected.","No character variables with accepted delimiters detected."
|
||||
"Split a text column by a recognised delimiter.","Split a text column by a recognised delimiter."
|
||||
"Apply split","Apply split"
|
||||
"Stacked relative barplot","Stacked relative barplot"
|
||||
"Create relative stacked barplots to show the distribution of categorical levels","Create relative stacked barplots to show the distribution of categorical levels"
|
||||
"Side-by-side barplot","Side-by-side barplot"
|
||||
"Create side-by-side barplot to show the distribution of categorical levels","Create side-by-side barplot to show the distribution of categorical levels"
|
||||
|
|
|
|||
|
|
|
@ -18,7 +18,6 @@
|
|||
"Column added!","Column added!"
|
||||
"Unique values:","Unique values:"
|
||||
"Variable to cut:","Variable to cut:"
|
||||
"Number of breaks:","Number of breaks:"
|
||||
"Close intervals on the right","Close intervals on the right"
|
||||
"Include lowest value","Include lowest value"
|
||||
"Create factor variable","Create factor variable"
|
||||
|
|
@ -272,3 +271,23 @@
|
|||
"Generating the report. Hold on for a moment..","Generating the report. Hold on for a moment.."
|
||||
"We encountered the following error creating your report:","We encountered the following error creating your report:"
|
||||
"There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data.","There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data."
|
||||
"Text or character to split string by","Text or character to split string by"
|
||||
"Split the variable","Split the variable"
|
||||
"Variable to split:","Variable to split:"
|
||||
"Direction:","Direction:"
|
||||
"Split string to multiple columns. Keep number of rows.","Split string to multiple columns. Keep number of rows."
|
||||
"Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Split string to multiple observations (rows) in the same column. Also ads id and instance columns"
|
||||
"Split character string","Split character string"
|
||||
"Split text","Split text"
|
||||
"Split a character string by a common delimiter","Split a character string by a common delimiter"
|
||||
"Select delimiter","Select delimiter"
|
||||
"Browse data preview","Browse data preview"
|
||||
"Original data","Original data"
|
||||
"Preview of result","Preview of result"
|
||||
"No character variables with accepted delimiters detected.","No character variables with accepted delimiters detected."
|
||||
"Split a text column by a recognised delimiter.","Split a text column by a recognised delimiter."
|
||||
"Apply split","Apply split"
|
||||
"Stacked relative barplot","Stacked relative barplot"
|
||||
"Create relative stacked barplots to show the distribution of categorical levels","Create relative stacked barplots to show the distribution of categorical levels"
|
||||
"Side-by-side barplot","Side-by-side barplot"
|
||||
"Create side-by-side barplot to show the distribution of categorical levels","Create side-by-side barplot to show the distribution of categorical levels"
|
||||
|
|
|
|||
|
|
|
@ -49,7 +49,6 @@
|
|||
"Column added!","Column added!"
|
||||
"Unique values:","Unique values:"
|
||||
"Variable to cut:","Variable to cut:"
|
||||
"Number of breaks:","Number of breaks:"
|
||||
"Close intervals on the right","Close intervals on the right"
|
||||
"Include lowest value","Include lowest value"
|
||||
"Create factor variable","Create factor variable"
|
||||
|
|
@ -272,3 +271,23 @@
|
|||
"By quantiles (groups of equal size)","By quantiles (groups of equal size)"
|
||||
"Please fill in web address and API token, then press 'Connect'.","Please fill in web address and API token, then press 'Connect'."
|
||||
"There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data.","There are more advanced options to modify factor/categorical variables as well as create new factor from an existing variable or new variables with R code. At the bottom you can restore the original data."
|
||||
"Text or character to split string by","Text or character to split string by"
|
||||
"Split the variable","Split the variable"
|
||||
"Variable to split:","Variable to split:"
|
||||
"Direction:","Direction:"
|
||||
"Split string to multiple columns. Keep number of rows.","Split string to multiple columns. Keep number of rows."
|
||||
"Split string to multiple observations (rows) in the same column. Also ads id and instance columns","Split string to multiple observations (rows) in the same column. Also ads id and instance columns"
|
||||
"Split character string","Split character string"
|
||||
"Split text","Split text"
|
||||
"Split a character string by a common delimiter","Split a character string by a common delimiter"
|
||||
"Select delimiter","Select delimiter"
|
||||
"Browse data preview","Browse data preview"
|
||||
"Original data","Original data"
|
||||
"Preview of result","Preview of result"
|
||||
"No character variables with accepted delimiters detected.","No character variables with accepted delimiters detected."
|
||||
"Split a text column by a recognised delimiter.","Split a text column by a recognised delimiter."
|
||||
"Apply split","Apply split"
|
||||
"Stacked relative barplot","Stacked relative barplot"
|
||||
"Create relative stacked barplots to show the distribution of categorical levels","Create relative stacked barplots to show the distribution of categorical levels"
|
||||
"Side-by-side barplot","Side-by-side barplot"
|
||||
"Create side-by-side barplot to show the distribution of categorical levels","Create side-by-side barplot to show the distribution of categorical levels"
|
||||
|
|
|
|||
|
|
|
@ -4,7 +4,7 @@
|
|||
\alias{compare_missings}
|
||||
\title{Pairwise comparison of missings across covariables}
|
||||
\usage{
|
||||
compare_missings(data, by_var)
|
||||
compare_missings(data, by_var, max_level = 20)
|
||||
}
|
||||
\arguments{
|
||||
\item{data}{data frame}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
\usage{
|
||||
data_missings_ui(id)
|
||||
|
||||
data_missings_server(id, data, variable, ...)
|
||||
data_missings_server(id, data, variable, max_level = 20, ...)
|
||||
}
|
||||
\arguments{
|
||||
\item{id}{Module id}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
% Generated by roxygen2: do not edit by hand
|
||||
% Please edit documentation in R/data_plots.R, R/plot_box.R, R/plot_hbar.R,
|
||||
% R/plot_ridge.R, R/plot_sankey.R, R/plot_scatter.R, R/plot_violin.R
|
||||
% Please edit documentation in R/data_plots.R, R/plot_bar.R, R/plot_box.R,
|
||||
% R/plot_hbar.R, R/plot_ridge.R, R/plot_sankey.R, R/plot_scatter.R,
|
||||
% R/plot_violin.R
|
||||
\name{data-plots}
|
||||
\alias{data-plots}
|
||||
\alias{data_visuals_ui}
|
||||
\alias{data_visuals_server}
|
||||
\alias{create_plot}
|
||||
\alias{plot_bar_single}
|
||||
\alias{plot_box}
|
||||
\alias{plot_box_single}
|
||||
\alias{plot_hbars}
|
||||
|
|
@ -22,6 +24,14 @@ data_visuals_server(id, data, ...)
|
|||
|
||||
create_plot(data, type, pri, sec, ter = NULL, ...)
|
||||
|
||||
plot_bar_single(
|
||||
data,
|
||||
pri,
|
||||
sec = NULL,
|
||||
style = c("stack", "dodge", "fill"),
|
||||
max_level = 30
|
||||
)
|
||||
|
||||
plot_box(data, pri, sec, ter = NULL, ...)
|
||||
|
||||
plot_box_single(data, pri, sec = NULL, seed = 2103)
|
||||
|
|
@ -60,6 +70,9 @@ plot_violin(data, pri, sec, ter = NULL)
|
|||
\item{sec}{secondary variable}
|
||||
|
||||
\item{ter}{tertiary variable}
|
||||
|
||||
\item{style}{barplot style passed to geom_bar position argument.
|
||||
One of c("stack", "dodge", "fill")}
|
||||
}
|
||||
\value{
|
||||
Shiny ui module
|
||||
|
|
@ -68,6 +81,8 @@ shiny server module
|
|||
|
||||
ggplot2 object
|
||||
|
||||
ggplot object
|
||||
|
||||
ggplot2 object
|
||||
|
||||
ggplot object
|
||||
|
|
@ -89,6 +104,8 @@ Data correlations evaluation module
|
|||
|
||||
Wrapper to create plot based on provided type
|
||||
|
||||
Single vertical barplot
|
||||
|
||||
Beautiful box plot(s)
|
||||
|
||||
Create nice box-plots
|
||||
|
|
@ -107,6 +124,13 @@ Beatiful violin plot
|
|||
}
|
||||
\examples{
|
||||
create_plot(mtcars, "plot_violin", "mpg", "cyl") |> attributes()
|
||||
mtcars |>
|
||||
dplyr::mutate(cyl = factor(cyl), am = factor(am)) |>
|
||||
plot_bar_single(pri = "cyl", sec = "am", style = "fill")
|
||||
|
||||
mtcars |>
|
||||
dplyr::mutate(cyl = factor(cyl), am = factor(am)) |>
|
||||
plot_bar_single(pri = "cyl", style = "stack")
|
||||
mtcars |> plot_box(pri = "mpg", sec = "gear")
|
||||
mtcars |> plot_box(pri = "mpg", sec="cyl")
|
||||
mtcars |>
|
||||
|
|
|
|||
22
man/detect_delimiter.Rd
Normal file
22
man/detect_delimiter.Rd
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
% Generated by roxygen2: do not edit by hand
|
||||
% Please edit documentation in R/separate_string.R
|
||||
\name{detect_delimiter}
|
||||
\alias{detect_delimiter}
|
||||
\title{Detect delimiters in string based on allowed delimiters}
|
||||
\usage{
|
||||
detect_delimiter(data, delimiters = c("_", "-", ";", "\\n", ","))
|
||||
}
|
||||
\arguments{
|
||||
\item{delimiters}{allowed delimiters}
|
||||
|
||||
\item{text}{character vector}
|
||||
}
|
||||
\value{
|
||||
character vector
|
||||
}
|
||||
\description{
|
||||
Accepts any repeat of delimiters and includes surrounding whitespace
|
||||
}
|
||||
\examples{
|
||||
sapply(c("Walk - run", "Sel__Re", "what;now"), detect_delimiter)
|
||||
}
|
||||
21
man/is_splittable.Rd
Normal file
21
man/is_splittable.Rd
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
% Generated by roxygen2: do not edit by hand
|
||||
% Please edit documentation in R/separate_string.R
|
||||
\name{is_splittable}
|
||||
\alias{is_splittable}
|
||||
\title{Determine if any variable in data frame character and contains recognized delimiters}
|
||||
\usage{
|
||||
is_splittable(data)
|
||||
}
|
||||
\arguments{
|
||||
\item{data}{vector or data.frame}
|
||||
}
|
||||
\value{
|
||||
logical
|
||||
}
|
||||
\description{
|
||||
Determine if any variable in data frame character and contains recognized delimiters
|
||||
}
|
||||
\examples{
|
||||
any(apply(mtcars, 2, is_splittable))
|
||||
is_splittable(mtcars)
|
||||
}
|
||||
23
man/separate_string.Rd
Normal file
23
man/separate_string.Rd
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
% Generated by roxygen2: do not edit by hand
|
||||
% Please edit documentation in R/separate_string.R
|
||||
\name{separate_string}
|
||||
\alias{separate_string}
|
||||
\title{Separate string wide or long}
|
||||
\usage{
|
||||
separate_string(data, col, delim, direction = c("wide", "long"))
|
||||
}
|
||||
\arguments{
|
||||
\item{data}{data}
|
||||
|
||||
\item{col}{column}
|
||||
|
||||
\item{delim}{delimiter}
|
||||
|
||||
\item{direction}{target direction}
|
||||
}
|
||||
\value{
|
||||
data.frame
|
||||
}
|
||||
\description{
|
||||
Separate string wide or long
|
||||
}
|
||||
44
man/split-string.Rd
Normal file
44
man/split-string.Rd
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
% Generated by roxygen2: do not edit by hand
|
||||
% Please edit documentation in R/separate_string.R
|
||||
\name{split-string}
|
||||
\alias{split-string}
|
||||
\alias{string_split_ui}
|
||||
\alias{string_split_server}
|
||||
\alias{modal_string_split}
|
||||
\title{String split module based on tidyr::separate_}
|
||||
\usage{
|
||||
string_split_ui(id)
|
||||
|
||||
string_split_server(id, data_r = reactive(NULL))
|
||||
|
||||
modal_string_split(
|
||||
id,
|
||||
title = i18n$t("Split character string"),
|
||||
easyClose = TRUE,
|
||||
size = "xl",
|
||||
footer = NULL
|
||||
)
|
||||
}
|
||||
\arguments{
|
||||
\item{id}{id}
|
||||
|
||||
\item{data_r}{reactive data}
|
||||
|
||||
\item{title}{Modal title}
|
||||
|
||||
\item{easyClose}{easyClose}
|
||||
|
||||
\item{size}{size}
|
||||
|
||||
\item{footer}{footer}
|
||||
}
|
||||
\value{
|
||||
A shiny ui module
|
||||
|
||||
shiny module server
|
||||
|
||||
shiny modal
|
||||
}
|
||||
\description{
|
||||
String split module based on tidyr::separate_
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue