使用rbind合并两个expss表格失败:无报错但未成功合并
解决expss表格合并失败的问题
你的代码里t1是通过capture.output()转成的字符向量,而t2是expss原生的表格对象(类为etable),两者类型不兼容,直接rbind自然无法正确合并。下面给两种可行的解决方式:
方法一:统一转成字符向量后拼接
把t2也转成字符向量,再和处理后的t1拼接,保持文本格式一致:
library(expss) library(dplyr) library(stringr) df <- mtcars df$vs <- 1 N_row <- 3 banner1 <- list(df$vs) # 处理t1为字符向量 t1 <- cro_cpct(df$qsec,banner1) t1_char <- capture.output(t1) t1_char <- c(t1_char[1:(N_row + 3)], "", str_pad("...", nchar(t1_char[1]), "both"), "", t1_char[(length(t1_char) - N_row):length(t1_char)]) # 处理t2为字符向量 Min <- function(x) min_col(x, na.rm = TRUE) Max <- function(x) max_col(x, na.rm = TRUE) t2 <- cross_fun(df, df$qsec, col_vars = banner1, fun = combine_functions(Max = Max, Min = Min, `Valid N` = valid_n)) t2_char <- capture.output(t2) # 合并并输出 t_all_char <- c(t1_char, "", t2_char) cat(paste(t_all_char, collapse = "\n"))
方法二:保留expss表格结构合并
如果想保留expss表格的可操作性(比如后续继续修改格式),可以把t1的截断部分处理成etable对象,再和t2纵向合并:
library(expss) library(dplyr) library(stringr) df <- mtcars df$vs <- 1 N_row <- 3 banner1 <- list(df$vs) # 生成完整的t1表格并截断处理 t1_full <- cro_cpct(df$qsec,banner1) t1_head <- t1_full[1:(N_row + 3), , drop = FALSE] t1_ellipsis <- etable(str_pad("...", nchar(rownames(t1_full)[1]), "both"), col_vars = banner1) t1_tail <- t1_full[(nrow(t1_full) - N_row):nrow(t1_full), , drop = FALSE] t1_combined <- rbind(t1_head, t1_ellipsis, t1_tail) # 生成t2表格 Min <- function(x) min_col(x, na.rm = TRUE) Max <- function(x) max_col(x, na.rm = TRUE) t2 <- cross_fun(df, df$qsec, col_vars = banner1, fun = combine_functions(Max = Max, Min = Min, `Valid N` = valid_n)) # 合并两个etable表格 t_all <- rbind(t1_combined, t2) # 输出结果 t_all
内容的提问来源于stack exchange,提问作者samrr_tr
相关产品推荐
相关产品推荐

