首页 > 解决方案 > 在 R 中将多个表附加到一个不同的列中

问题描述

在制作了几张表后我有一个数据框我想创建一个数据框,将所有表组合成一个数据框以便导出到 Excel。唯一的问题是每个表中的第一个变量都不同,因此bind_rows不起作用。

虚拟样本数据:

df1 = data.frame(Id = c(11:16), date = seq(as.Date("2015-01-01"),as.Date("2015-01-6"),1))
df2 = data.frame(HH_size = c(1:6 ), date = seq(as.Date("2015-01-01"),as.Date("2015-01-6"),1) )

假设我做了这些桌子

df11<- df1 %>%
  dplyr::group_by(date) %>%
  count(Id) %>%
  tidyr::spread(date,n)

df22<- df2 %>%
  dplyr::group_by(date) %>%
  count(HH_size) %>%
  tidyr::spread(date,n)


df11

         Id `2015-01-01` `2015-01-02` `2015-01-03` `2015-01-04` `2015-01-05` `2015-01-06`
       <int>        <int>        <int>        <int>        <int>        <int>        <int>
1         11            1           NA           NA           NA           NA           NA
2         12           NA            1           NA           NA           NA           NA
3         13           NA           NA            1           NA           NA           NA
4         14           NA           NA           NA            1           NA           NA
5         15           NA           NA           NA           NA            1           NA
6         16           NA           NA           NA           NA           NA            1

这行不通

list <- c("df11" , "df22")
list %>% map_df(bind_rows)
Error: Argument 1 must have names

这是我想要的输出:

   label      cat `2015-01-01` `2015-01-02` `2015-01-03` `2015-01-04` `2015-01-05` `2015-01-06`

   Id         11            1           NA           NA           NA           NA           NA
   Id         12           NA            1           NA           NA           NA           NA
   Id         13           NA           NA            1           NA           NA           NA
   Id         14           NA           NA           NA            1           NA           NA
   Id         15           NA           NA           NA           NA            1           NA
   Id         16           NA           NA           NA           NA           NA            1
HH_size       1            1           NA           NA           NA           NA           NA
HH_size       2           NA            1           NA           NA           NA           NA
HH_size       3           NA           NA            1           NA           NA           NA
HH_size       4           NA           NA           NA            1           NA           NA
HH_size       5           NA           NA           NA           NA            1           NA
HH_size       6           NA           NA           NA           NA           NA            1

标签: rdplyrtidyverse

解决方案


将所有数据框放在一个列表中,然后您可以执行以下操作:

library(tidyverse)

list_df <- lst(df1, df2)

map_df(list_df, ~{
  col <- names(.x)[1]
  .x %>%
  count(.data[[col]], date) %>%
  pivot_wider(names_from = date, values_from = n) %>%
  mutate(label = col) %>%
  rename_with(~'cat', 1)
  })

#     cat `2015-01-01` `2015-01-02` `2015-01-03` `2015-01-04` `2015-01-05` `2015-01-06` label  
#   <int>        <int>        <int>        <int>        <int>        <int>        <int> <chr>  
# 1    11            1           NA           NA           NA           NA           NA Id     
# 2    12           NA            1           NA           NA           NA           NA Id     
# 3    13           NA           NA            1           NA           NA           NA Id     
# 4    14           NA           NA           NA            1           NA           NA Id     
# 5    15           NA           NA           NA           NA            1           NA Id     
# 6    16           NA           NA           NA           NA           NA            1 Id     
# 7     1            1           NA           NA           NA           NA           NA HH_size
# 8     2           NA            1           NA           NA           NA           NA HH_size
# 9     3           NA           NA            1           NA           NA           NA HH_size
#10     4           NA           NA           NA            1           NA           NA HH_size
#11     5           NA           NA           NA           NA            1           NA HH_size
#12     6           NA           NA           NA           NA           NA            1 HH_size

推荐阅读