簡體   English   中英

綁定具有相同名稱的列表中的數據幀行

[英]Bind rows of the dataframes in a list with the same name

如果已經回答,請提前道歉。 我有以下數據幀列表。

 my_list <- list(a = data.frame(a1 = c(1,2), b1 = c(3,4), c1 =c(5,6)),
                 b = data.frame(b1 = c(1,2,3)),
                 a = data.frame(a1 = c(11,21), b1 = c(31,41), c1 =c(51,61)),
                 b = data.frame(b1 = c(12,22)))

如何使用purr使用相同的名稱綁定列表中所有數據幀的行? 在該示例中,期望的結果是具有兩個數據幀a和b的列表。

list(a = bind_rows(data.frame(a1 = c(1,2), b1 = c(3,4), c1 =c(5,6)),
                   data.frame(a1 = c(11,21), b1 = c(31,41), c1 =c(51,61))),
     b = bind_rows(data.frame(b1 = c(1,2)),
                   data.frame(b1 = c(12,22))))

我如何使用bind_rows解決方案來推廣具有相同名稱的列表元素。 謝謝!

使用帶有bind_rows tapply ,將names(my_list)作為INDEX (或組變量)傳遞:

tapply(my_list, names(my_list), dplyr::bind_rows)

#$a
#  a1 b1 c1
#1  1  3  5
#2  2  4  6
#3 11 31 51
#4 21 41 61

#$b
#  b1
#1  1
#2  2
#3  3
#4 12
#5 22

或者另一個選項,首先split列表然后map每個組和bind_rows (沒有注意到@alistaire在評論中提供了這個選項,但是除非反對,否則將保留此選項以獲得完整性):

library(purrr)

split(my_list, names(my_list)) %>% map(dplyr::bind_rows)
# could also use baseR solution as from @Rich Scriven 
# split(my_list, names(my_list)) %>% map(do.call, what='rbind')

#$a
#  a1 b1 c1
#1  1  3  5
#2  2  4  6
#3 11 31 51
#4 21 41 61

#$b
#  b1
#1  1
#2  2
#3  3
#4 12
#5 22

這是一個帶==的選項

names(my_list) %>% 
     unique %>% 
     map(~ my_list[names(my_list)==.x] %>% 
       bind_rows)
#[[1]]
#  a1 b1 c1
#1  1  3  5
#2  2  4  6
#3 11 31 51
#4 21 41 61

#[[2]]
#  b1
#1  1
#2  2
#3  3
#4 12
#5 22

暫無
暫無

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

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