[英]Merge two lists of data.frames
我有兩個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]]
等assign_zeros[[2]]
。
我的計划是將兩個data.frames的每組連接起來,然后按列1排序。我知道,為了連接列表,我需要assign_zeros
的名稱與df_epi_in_strata
的名稱匹配。
我嘗試了這個 ,並設置了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
?
目前尚不清楚您實際上在做什么,但是如果將問題分成幾部分,這很容易。
第一步:創建一個合並一對 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)
這是帶有setNames
的purrr
解決方案,用於在追加之前對齊列名:
library(tidyverse)
map2(df_epi_in_strata, assign_zeros, ~rbind(.x, setNames(.y, names(.x))))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.