R/df_analysis.R

Defines functions df_crossTable_run df_crossTable_fun

Documented in df_crossTable_fun df_crossTable_run

#' 交叉表功能处理
#'
#' @param Func_Name 函数名
#'
#' @return 返回函数对象
#' @export
#'
#' @examples
#' df_crossTable_fun()
df_crossTable_fun <- function(Func_Name='计数') {
  if( Func_Name =='计数'){
    res = length
  }else if (Func_Name== '求和'){
    res = sum
  }else if (Func_Name =='平均数'){
    res = mean
  }else if (Func_Name == '最大值'){
    res = max
  }else if(Func_Name == '最小值'){
    res = min
  } else if (Func_Name == '方差'){
    res = var
  } else if (Func_Name == '标准差'){
    res = sd
  }else{
    res = length
  }
  return(res)
  
}

#' 返回交叉表运算内容
#'
#' @param data 数据
#' @param row_holder  行标签 
#' @param column_holder 列标签
#' @param value_hoder 唯一值
#' @param fun_name 函数
#' @param margins 分类汇总
#'
#' @return 返回数据框
#' @export
#'
#' @examples
#' df_crossTable_run()
df_crossTable_run <- function(data = mtcars,
                              row_holder=c('mpg'),
                              column_holder = c('cyl'),
                              value_hoder = 'disp',
                              fun_name = '求和',
                              margins = TRUE
                              ) {
  if(length(row_holder)){
    #行标准不允许为空
    formula_row = paste0(row_holder,collapse = '+')
    if(column_holder == ''){
      formula_col = '.'
    }else{
      formula_col = paste0(column_holder,collapse = '+')
    }
    formula_all = paste0(formula_row,'~',formula_col)
    res = reshape2::dcast(data = data,formula = formula_all,value.var = value_hoder,
                          fun.aggregate = df_crossTable_fun(fun_name),margins = margins)
  }else{
    #返回空
    res <- data.frame()
  }
  return(res)
  
}
takewiki/tsdo documentation built on July 5, 2023, 10:57 p.m.