Rbind 用于具有重复行名称的表

问题描述 投票:0回答:1

我有两个表,我想将它们合并起来创建一个汇总表

df1 <- data.frame(median=c(151, 98, 125, 47),
                             Q25=c(148, 90, 120, 44),
                             Q75=c(158, 104, 132, 53),
                  pass_or_fail=c('pass')
                             )
row.names(df1)<-c("param1", "param2", "param3", "param4")

df2 <- data.frame(median=c(148, 95, 135, 40),
                             Q25=c(140, 88, 130, 35),
                             Q75=c(150, 100, 141, 45),
                  pass_or_fail=c('fail')
                             )
row.names(df2)<-c("param1", "param2", "param3", "param4")



rbind(df1, df2)

我正在寻找的输出如下所示,其中两个数据帧之间共享的行名,列按“通过”或“失败”分组,值显示为中位数,IQR 放在括号中

desired output

rbind 的结果会更改行名称,因为不允许重复名称。我想知道如何克服行名被重命名的问题,以及是否可以使用 kable 或其他函数将 IQR 显示在括号中。

r dataframe
1个回答
0
投票
library(dplyr)
library(tibble)
library(tidyr)

bind_rows(rownames_to_column(df1), 
          rownames_to_column(df2)) %>% 
  mutate(stat = paste0(median, " (", Q25, "-", Q75, ")"), .keep = "unused") %>% 
  pivot_wider(names_from = pass_or_fail, values_from = stat) %>% 
  column_to_rownames()

#>                 pass          fail
#> param1 151 (148-158) 148 (140-150)
#> param2   98 (90-104)   95 (88-100)
#> param3 125 (120-132) 135 (130-141)
#> param4    47 (44-53)    40 (35-45)

创建于 2024-07-07,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.