![](/img/trans.png)
[英]How do I merge two lists of mostly differing dataframes and bind the rows of those dataframes with the same name in R?
[英]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.