From b19e79ca7234665bcca8a36989211d75bf8f4553 Mon Sep 17 00:00:00 2001 From: Dongdong Kong Date: Mon, 23 Dec 2024 17:01:37 +0800 Subject: [PATCH] add read_excel --- NAMESPACE | 1 + R/tools_data.table.R | 27 --------------------------- R/tools_ufile.R | 41 +++++++++++++++++++++++++++++++++++++++++ man/read_excel.Rd | 14 ++++++++++++++ 4 files changed, 56 insertions(+), 27 deletions(-) create mode 100644 R/tools_ufile.R create mode 100644 man/read_excel.Rd diff --git a/NAMESPACE b/NAMESPACE index b0bfd30..0314729 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -153,6 +153,7 @@ export(print2) export(pro_map) export(progressively) export(quantile_envelope) +export(read_excel) export(read_ufile) export(read_xlsx) export(read_xlsx2list) diff --git a/R/tools_data.table.R b/R/tools_data.table.R index b260d1b..795ee09 100644 --- a/R/tools_data.table.R +++ b/R/tools_data.table.R @@ -18,30 +18,3 @@ fread_dir <- function(indir, pattern = "*.csv", ..., .progress="text", list2df=T res }) } - -#' @export -read_ufile <- function(f, nodata = c(-99999, -9999)) { - unit <- fread(f, nrows = 1) - dat <- fread(f, skip = 2, header = FALSE) - for (nd in nodata) { - dat[dat == nd] <- NA - } - names(dat) <- names(unit) - structure(list(data = dat, unit = unit), class = "unit_df") -} - -# define a S3 method -#' @export -write_ufile <- function(x, ...) UseMethod("write_ufile") - -#' @export -write_ufile.data.frame <- function(data, unit, fout) { - fwrite(unit, fout) - fwrite(data, fout, col.names = FALSE, append = TRUE) -} - -#' @export -write_ufile.unit_df <- function(l, fout) { - fwrite(l$unit, fout) - fwrite(l$data, fout, col.names = FALSE, append = TRUE) -} diff --git a/R/tools_ufile.R b/R/tools_ufile.R new file mode 100644 index 0000000..b387004 --- /dev/null +++ b/R/tools_ufile.R @@ -0,0 +1,41 @@ +#' @export +read_ufile <- function(f, nodata = c(-99999, -9999)) { + unit <- fread(f, nrows = 1) + dat <- fread(f, skip = 2, header = FALSE) + for (nd in nodata) { + dat[dat == nd] <- NA + } + names(dat) <- names(unit) + structure(list(data = dat, unit = unit), class = "unit_df") +} + +# define a S3 method +#' @export +write_ufile <- function(x, ...) UseMethod("write_ufile") + +#' @export +write_ufile.data.frame <- function(data, unit, fout) { + fwrite(unit, fout) + fwrite(data, fout, col.names = FALSE, append = TRUE) +} + +#' @export +write_ufile.unit_df <- function(l, fout) { + fwrite(l$unit, fout) + fwrite(l$data, fout, col.names = FALSE, append = TRUE) +} + +#' read csv or xls/xlsx file +#' +#' @param ... others to fun, one of [data.table::fread()], [readxl::read_xls()], [read_xlsx()] +#' @export +read_excel <- function(f, ...) { + fun <- switch(file_ext(f), + csv = data.table::fread, + xls = readxl::read_xls, + xlsx = read_xlsx + ) + d <- fun(f, ...) + if ("DOY" %in% names(d)) d <- dplyr::select(d, -DOY) + d |> data.table() +} diff --git a/man/read_excel.Rd b/man/read_excel.Rd new file mode 100644 index 0000000..bb4c77b --- /dev/null +++ b/man/read_excel.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/tools_ufile.R +\name{read_excel} +\alias{read_excel} +\title{read csv or xls/xlsx file} +\usage{ +read_excel(f, ...) +} +\arguments{ +\item{...}{others to fun, one of \code{\link[data.table:fread]{data.table::fread()}}, \code{\link[readxl:read_excel]{readxl::read_xls()}}, \code{\link[=read_xlsx]{read_xlsx()}}} +} +\description{ +read csv or xls/xlsx file +}