我有两个data.frames列表,名为df_epi_in_strata
和assign_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
之类的结果?
答案 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))))