You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并含重复行名的R数据框并生成带IQR的汇总表?

解决方法

1. 数据整理与合并

别用rbind(),它是行方向合并,会导致重复行名被自动重命名。我们需要把两个数据框转成宽格式后按参数名合并,具体步骤如下:

先加载必要的包:

library(dplyr)
library(tidyr)
library(knitr)

处理两个数据框,把中位数和IQR格式化为指定字符串,并转换为宽格式:

# 处理df1,生成pass列的格式化内容
df1_processed <- df1 %>%
  rownames_to_column("param") %>%
  mutate(pass = paste0(median, " (", Q25, "-", Q75, ")")) %>%
  select(param, pass)

# 处理df2,生成fail列的格式化内容
df2_processed <- df2 %>%
  rownames_to_column("param") %>%
  mutate(fail = paste0(median, " (", Q25, "-", Q75, ")")) %>%
  select(param, fail)

# 按参数名合并两个处理后的表
final_df <- inner_join(df1_processed, df2_processed, by = "param")

# 可选:把param设为行名
rownames(final_df) <- final_df$param
final_df <- final_df %>% select(-param)

执行后final_df的结构完全符合需求:行是param1到param4,列是pass和fail,每个单元格为「中位数(IQR)」格式。

2. 用kable生成美观表格

用kable()可以直接把final_df转成格式化表格:

kable(final_df, caption = "参数汇总表(中位数(IQR))")

如果需要进一步美化,可结合kableExtra包:

library(kableExtra)
kable(final_df, caption = "参数汇总表(中位数(IQR))") %>%
  kable_styling(bootstrap_options = c("striped", "hover"))

补充说明

  • rbind()不适用的原因:它是堆叠行,会让pass和fail的参数行重复出现,R为避免重复行名会自动加后缀(如param1.1),不符合「以参数为行、分组为列」的需求。
  • 格式化逻辑:paste0()用于无分隔符拼接内容,把中位数、括号、Q25、Q75组合成指定格式。

内容的提问来源于stack exchange,提问作者BeardedWisdom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 11:39:58