合并两个data.frames列表

时间:2017-04-20 14:36:15

标签: r

我有两个data.frames列表,名为df_epi_in_strataassign_zeros

> class(df_epi_in_strata)
[1] "list"
> class(df_epi_in_strata[[1]])
[1] "data.frame"

> df_epi_in_strata[[1]]
   Var1 Freq
1     1    2
2     2    1
3     3    1
4     6    3

> class(assign_zeros)
[1] "list"
> class(assign_zeros[[1]])
> [1] "data.frame"
> assign_zeros[[1]]
      x 0
1     4 0
2     5 0

对于数据框中的每个列表,我想合并data.frames,使每个列表都“完整”。我需要匹配列表元素。也就是说,对于数据框中的九个列表中的每一个,结果如下所示:

result_list[[1]]
  Var1 Freq
1  1   2
2  2   1
3  3   1
4  4   0
5  5   0
6  6   3

所以我将df_epi_in_strata[[1]]assign_zeros[[1]]合并,df_epi_in_strata[[2]]合并assign_zeros[[2]]等。

我的计划是连接每组两个data.frames,然后按列1排序。我知道我需要assign_zeros的名称来匹配df_epi_in_strata的名称以便连接列表。

我尝试this,然后设置colnames <- c("Var1", "Freq1"),但得到了:

Error in list2env(lapply(assign_zeros, setNames, colnames), .GlobalEnv) : names(x) must be a character vector of the same length as x

是否有人知道如何按索引合并数据框,为我的九个列表中的每一个获取result_list之类的结果?

2 个答案:

答案 0 :(得分:0)

目前还不清楚你在做什么,但如果你把问题分成几部分就很容易了。

第一步:创建一个合并一对 data.frames的函数(这是使用dplyr,因为没有理由不这样做):

insert_missing_values = function (df, missing) {
    colnames(missing) = colnames(df)
    bind_rows(df, missing) %>% arrange(Var1)
}

接下来,适用于所有列表对:

result_list = mapply(insert_missing_values, df_epi_in_strata, assign_zeros)

答案 1 :(得分:0)

以下是purrr解决方案setNames,以便在追加之前对齐列名:

library(tidyverse)
map2(df_epi_in_strata, assign_zeros, ~rbind(.x, setNames(.y, names(.x))))