2017-04-20 85 views
0

我有data.frames的两份名单,称为df_epi_in_strataassign_zeros合并data.frames的两个列表

> 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每个我的九个列表的结果呢?

回答

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) 
+0

谢谢,但我得到一个错误:'错误在(函数(df,缺少):找不到函数“%>%” – StatsSorceress

+0

@StatsSorceress就像我说的,这需要dplyr包。 –

0

这里的purrr解决方案与setNames对齐列名前附加:

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