【问题标题】:cbind two output tables in one in R在R中将两个输出表合二为一
【发布时间】:2018-07-07 11:01:38
【问题描述】:

我有两张桌子。 第一个

  char    1         2    
  <fct> <chr>    <chr>   
1 mild   2(2.00%) 2(2.00%)
2 moder  2(2.00%) 2(2.00%)

第二个

  char  `1               `2`
  <fct> <chr>           <chr>       
1 mild   7 (25.00%)      7 (25.00%)  
2 moder  7 (25.00%)      7 (25.00%) 

我想将这些表合并为一个。 即,作为我期望的输出

char      1                      2
<fct>   <chr>     Y             <chr>          Y
mild   7(25.00%) 2(2.00%)      7(25.00%)    2(2.00%)
moder  7(25.00%) 2(2.00%)      7(25.00%)    2(2.00%)

怎么做?

【问题讨论】:

  • 你能说明你是如何制作这两张表的吗?从输出中我不太清楚它们是如何布局的。

标签: r dataframe dplyr data.table


【解决方案1】:

像这样绑定数据帧可能不安全,我建议改为完全连接:

df3 <- merge(df1, df2, by="char", all = TRUE)
df3[c("char",sort(names(df3)[-1]))]
#    char       1.x        1.y       2.x        2.y
# 1  mild 2 (2.00%) 7 (25.00%) 2 (2.00%) 7 (25.00%)
# 2 moder 2 (2.00%) 7 (25.00%) 2 (2.00%) 7 (25.00%)

【讨论】:

  • 是的,列绑定假定行的顺序相同(类似于 bind_rows,它可以连接顺序不同的同名列)。这是一个更好的解决方案!
【解决方案2】:

假设您的两个表如下所示:

library(tidyverse)

df1 = data_frame(
  char = factor(c('mild', 'moder')),
  `1` = c('2 (2.00%)', '2 (2.00%)'),
  `2` = c('2 (2.00%)', '2 (2.00%)'))
df2 = data_frame(
  char = factor(c('mild', 'moder')),
  `1` = c('7 (25.00%)', '7 (25.00%)'),
  `2` = c('7 (25.00%)', '7 (25.00%)'))

# using base R
cbind(df1, df2)
#>    char         1         2  char          1          2
#> 1  mild 2 (2.00%) 2 (2.00%)  mild 7 (25.00%) 7 (25.00%)
#> 2 moder 2 (2.00%) 2 (2.00%) moder 7 (25.00%) 7 (25.00%)

# using tidyverse
bind_cols(df1, df2)
#> # A tibble: 2 x 6
#>   char  `1`       `2`       char1 `11`       `21`      
#>   <fct> <chr>     <chr>     <fct> <chr>      <chr>     
#> 1 mild  2 (2.00%) 2 (2.00%) mild  7 (25.00%) 7 (25.00%)
#> 2 moder 2 (2.00%) 2 (2.00%) moder 7 (25.00%) 7 (25.00%)

我推荐使用 tidyverse,因为你不会得到重复的列名(这真的会搞乱对这些数据的进一步操作),但无论如何你可能都想setNames

【讨论】:

  • 这是一个简单又好用的解决方案。但!输出 1 轻度 2 (2.00%) 2 (2.00%) 轻度 7 (25.00%) 7 (25.00%) ,你能将输出重组为轻度 7(25.00%) 2(2.00%) 7(25.00%) 2(2.00 %)
  • 我可能会编辑您的问题以更好地说明您在寻找什么。
猜你喜欢
  • 2015-12-30
  • 2010-11-16
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-23
  • 2012-10-21
相关资源
最近更新 更多