簡體   English   中英

合並兩個data.frames列表

[英]Merge two lists of data.frames

我有兩個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]]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)

這是帶有setNamespurrr解決方案,用於在追加之前對齊列名:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM