gravatar

OleksandrLunhov

Oleksandr

Recently Published

таблиця Розподіл респондентів за групами посад (кількість осіб, %
library(dplyr) library(flextable) library(officer) N <- 30 # загальна кількість респондентів tbl_roles <- tibble::tibble( `Група посад` = c( "Адміністративні та допоміжні ролі", "Медичні фахівці (невролог, психіатр)", "Педагогічні працівники / освітні фахівці", "Працівники органів соціального захисту / державних служб", "Юристи / правові фахівці", "Менеджери програм, координатори, керівники підрозділів", "Психологи", "Фахівці із соціальної роботи / соціальні працівники" ), n = c(6, 2, 2, 5, 3, 10, 11, 21) ) %>% mutate(`%` = round(n / N * 100, 1)) ft <- flextable(tbl_roles) %>% set_caption("Таблиця 2.1. Розподіл респондентів за групами посад (кількість осіб, %)") %>% align(j = 1, align = "left") %>% align(j = c("n", "%"), align = "center") %>% autofit() ft # Експорт у Word doc <- read_docx() %>% body_add_flextable(ft) print(doc, target = "roles_table_with_percent.docx")
table questionnaire 2.1
# --- 0) Packages --- packs <- c("readr", "dplyr", "flextable", "officer", "rlang") new_packs <- packs[!(packs %in% installed.packages()[,"Package"])] if(length(new_packs)) install.packages(new_packs) lapply(packs, library, character.only = TRUE) # --- 1) Read data --- df <- readr::read_csv( "C:/Users/selfi/OneDrive/Desktop/analysis_data_masters.csv", show_col_types = FALSE ) # --- 2) Rename columns with spaces (IMPORTANT) --- df <- df %>% dplyr::rename( sex = sex, type_org = `type of org`, general_exp = `general exp`, current_exp = `current exp`, supervision = supervision, IDP_status = `IDP status`, disabilitiy = disabilitiy, care = care, household = household ) # --- 3) Recode: 1 = Так, 2 = Ні (IDP, disability, care, household) --- df <- df %>% dplyr::mutate( IDP_status = factor(IDP_status, levels = c(1, 2), labels = c("Так", "Ні")), disabilitiy = factor(disabilitiy, levels = c(1, 2), labels = c("Так", "Ні")), care = factor(care, levels = c(1, 2), labels = c("Так", "Ні")), household = factor(household, levels = c(1, 2), labels = c("Так", "Ні")) ) # --- 4) Helper: frequency block for one variable (keeps factor order) --- freq_block <- function(data, var, indicator_label) { v <- rlang::sym(var) data %>% dplyr::filter(!is.na(!!v), as.character(!!v) != "") %>% dplyr::count(!!v, name = "n", .drop = FALSE) %>% # keep factor order dplyr::mutate( `%` = round(100 * n / sum(n), 1), Показник = indicator_label, Категорія = as.character(!!v) ) %>% dplyr::select(Показник, Категорія, n, `%`) } # --- 5) Build full table --- table_data <- dplyr::bind_rows( freq_block(df, "sex", "Стать"), freq_block(df, "type_org", "Тип організації"), freq_block(df, "general_exp", "Загальний стаж"), freq_block(df, "current_exp", "Поточний стаж"), freq_block(df, "supervision", "Частота супервізії"), freq_block(df, "IDP_status", "Статус ВПО"), freq_block(df, "disabilitiy", "Інвалідність"), freq_block(df, "care", "Потреба в догляді"), freq_block(df, "household", "Домогосподарство") ) # --- 6) Flextable formatting (like screenshot) --- ft <- flextable::flextable(table_data) %>% flextable::set_caption("Анкетні дані") %>% flextable::merge_v(j = "Показник") %>% flextable::bold(j = "Показник", bold = TRUE) %>% flextable::align(j = c("Показник","Категорія"), align = "left", part = "all") %>% flextable::align(j = c("n","%"), align = "center", part = "all") %>% flextable::autofit() %>% flextable::border_remove() %>% flextable::border_outer(border = fp_border(width = 1)) %>% flextable::border_inner_h(border = fp_border(width = 1)) %>% flextable::border_inner_v(border = fp_border(width = 1)) # Preview in Viewer ft # --- 7) Export to Word --- doc <- officer::read_docx() %>% officer::body_add_flextable(ft) print(doc, target = "anketni_dani.docx")