2017-04-20 74 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))))