transfer from old repo
This commit is contained in:
parent
cfa4a5f9cc
commit
277e2b8cf3
1111 changed files with 83736 additions and 0 deletions
83
1 PA Decline/dst import.R
Normal file
83
1 PA Decline/dst import.R
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
#' Reads docx file and splits each table into list
|
||||
#'
|
||||
#' @param path file path
|
||||
#' @param data.type character vector. Could be "paragraph" or "table cell".
|
||||
#'
|
||||
#' @return
|
||||
#' @export
|
||||
#'
|
||||
#' @examples
|
||||
docx2ds <- function(path = here::here("data-raw/Deltagerliste Skirva 2024.docx"),
|
||||
data.type = "table cell", verbose = TRUE) {
|
||||
# Ref: https://www.r-bloggers.com/2020/07/how-to-read-and-create-word-documents-in-r/
|
||||
doc <- officer::read_docx(path)
|
||||
|
||||
content <- doc |> officer::docx_summary()
|
||||
|
||||
if (verbose) {
|
||||
message("Content types in the current document are as follows:")
|
||||
print(content$content_type |> unique())
|
||||
}
|
||||
|
||||
table_cells <- content |> dplyr::filter(content_type %in% data.type)
|
||||
|
||||
# .x <- split(table_cells, table_cells$doc_index)[[4]]
|
||||
|
||||
split(table_cells, table_cells$doc_index) |> purrr::map(function(.x) {
|
||||
table_data <- .x |>
|
||||
dplyr::filter(!is_header) |>
|
||||
dplyr::select(row_id, cell_id, text)
|
||||
|
||||
# split data into individual columns
|
||||
splits <- split(table_data, table_data$cell_id)
|
||||
splits <- lapply(splits, function(.y) .y$text)
|
||||
splits <- splits |>
|
||||
purrr::keep(function(.y) length(.y)>1)
|
||||
|
||||
# If a footer has been added, it is considered part of the first column,
|
||||
# and will result in unequal col lengths.
|
||||
# This solution does not handle merged cells
|
||||
col_lengths <- lengths(splits)
|
||||
|
||||
if (col_lengths[1] > col_lengths[2]){
|
||||
splits[[1]] <- splits[[1]][seq_len(col_lengths[2])]
|
||||
}
|
||||
|
||||
# combine columns back together in wide format
|
||||
table_result <- splits |>
|
||||
dplyr::bind_cols()
|
||||
|
||||
# get table headers
|
||||
cols <- .x |> dplyr::filter(is_header)
|
||||
names(table_result) <- cols$text
|
||||
table_result
|
||||
})
|
||||
}
|
||||
|
||||
get_coefs <- function(path,
|
||||
index.table = 1) {
|
||||
data = docx2ds(
|
||||
path = path
|
||||
)
|
||||
|
||||
data |>
|
||||
purrr::pluck(index.table) |>
|
||||
setNames(c(
|
||||
"variable",
|
||||
lapply(c("drop", "hop"),
|
||||
paste,
|
||||
c("median", "mean"),
|
||||
sep = "_"
|
||||
) |>
|
||||
purrr::list_c()
|
||||
)) |>
|
||||
dplyr::select(variable, tidyselect::ends_with("median")) #|>
|
||||
# dplyr::mutate(dplyr::across(tidyselect::ends_with("median"),~as.numeric))
|
||||
# setNames(c("variable","decrease","increase"))
|
||||
}
|
||||
|
||||
gtsummary2docx <- function(data, path) {
|
||||
data |>
|
||||
gtsummary::as_flex_table() |>
|
||||
flextable::save_as_docx(path = path)
|
||||
}
|
||||
Loading…
Reference in a new issue