在R中将两个输出表绑定为一个

时间:2018-07-07 11:01:39

标签: r dataframe dplyr data.table

我有两个表。 第一个

  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%)

如何做到?

2 个答案:

答案 0 :(得分:2)

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

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%)

答案 1 :(得分:1)

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

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不管。