使用Dplyr :: Bind_Rows和Purrr在数据框列表中有选择地绑定不同的数据框 [英] Use Dplyr::Bind_Rows and Purrr to Selectively Bind Different Dataframes In a List of Dataframes

查看:108
本文介绍了使用Dplyr :: Bind_Rows和Purrr在数据框列表中有选择地绑定不同的数据框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

library(tidyverse)

我正在尝试使用tidyverse工具通过dplyr :: bind_rows()有选择地绑定数据帧列表。我将分割mtcars数据集,以创建真实数据的基本复制。

I'm attempting to use tidyverse tools to selectively bind a list of dataframes using dplyr::bind_rows(). I'll split the mtcars dataset to create a basic reproduction of my real data.

Df<-mtcars%>%
split(.$carb)%>%
head()

我可以将其与bind_rows()绑定在一起...

I can bind it together with bind_rows()...

Df<-Df%>%
bind_rows()

但是如何有选择地绑定列表中的元素。我想做的是创建两个列表-第一个绑定列表元素1,3,6,第二个绑定2,4,8。
我在想...

But how do I selectively bind elements of the list. What I want to do is create two lists - the first binds list elements 1,3,6 while the second binds 2,4,8. I'm thinking something like...

Df<-Df%>%map(~bind_rows(.x,list(.$`1`,.$`3`,.$`6`),list(.$`2`,.$`4`,.$`8`)))

但是此代码显然是不正确的,因此,我希望您能提出一些建议。

But this code is obviously not correct so I would appreciate some suggestions.

推荐答案

一种简单的方法是在隐式函数中只映射一个固定的参数。

An easy approach is to just map with one fixed argument in an implicit function.

picker <- list(c('1', '3', '6'), c('2', '4', '8'))
my_out <- map(picker, ~'['(Df, .x) %>% bind_rows) 

my_out %>% print 

根据其他答案,我想您现在想要的是>

which based on the other answers is I think what you want now:

[[1]]
    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
1  22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
2  21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
3  18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
4  32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
5  33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
6  21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
7  27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
8  16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
9  17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
10 15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
11 19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6

[[2]]
    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
1  18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
2  24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
3  22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
4  30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
5  15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
6  15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
7  19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
8  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
9  30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
10 21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
11 21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
12 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
13 14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
14 19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
15 17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
16 10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
17 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
18 14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
19 13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
20 15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
21 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8

注意:最初我对是否要使用我所说的 picker感到困惑。 code>成为列表的索引,或者您想为列表的名称。这种混淆只是 split()命名列表方式的一种人工产物,可能不适用于您的真实数据。

Note: I originally was very confused by whether you wanted what I call picker to be indices of the list or you wanted to names of the list. This confusion was just an artifact of the way split() names lists and probably doesn't apply to your real data.

这篇关于使用Dplyr :: Bind_Rows和Purrr在数据框列表中有选择地绑定不同的数据框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆