Chr*_*tos 3 r list dataframe purrr tidyverse
如果已经回答,请提前道歉.我有以下数据帧列表.
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)))
Run Code Online (Sandbox Code Playgroud)
如何使用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))))
Run Code Online (Sandbox Code Playgroud)
我如何使用bind_rows解决方案来推广具有相同名称的列表元素.谢谢!
使用tapply与bind_rows,通过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
Run Code Online (Sandbox Code Playgroud)
或者另一种选择,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
358 次 |
| 最近记录: |