在lapply中按2列动态子集数据帧

用户名

在此示例中,我通过内的所有可能级别在lapply中替换数据帧column这工作正常,但是如果列有2列,如何扩展此示例columns = c("am","cyl")我无法提出任何可行的方法,谢谢

columns = ("am")

out <- 
lapply(unique(mtcars[, columns]), function(x) {
  tempDf <- head(mtcars[mtcars[, columns] %in% x, ])

  return(tempDf)

})

out

[[1]]
                mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4      21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1

[[2]]
                   mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Hornet 4 Drive    21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360        14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D         24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230          22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
伊恩·坎贝尔

这是使用dplyr的方法rlang我不知道它是否比@Taufi更好,特别是因为它需要在新列中保留行名。

为了更好地理解该rlang部分,group_split通常将其用作group_split(am,cyl)因此,我们要求parse_exprs将保存的文本columns转换为表达式列表。然后将!!!这些表达式拼接为group_split期望的形式

library(dplyr)
library(rlang)
columns = c("am","cyl")
mtcars %>%
      rownames_to_column("Car") %>%
      group_split(!!!parse_exprs(columns),keep = TRUE) %>%
      map(head,3)
[[1]]
# A tibble: 3 x 12
  Car             mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
  <chr>         <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Merc 240D      24.4     4  147.    62  3.69  3.19  20       1     0     4     2
2 Merc 230       22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
3 Toyota Corona  21.5     4  120.    97  3.7   2.46  20.0     1     0     3     1

[[2]]
# A tibble: 3 x 12
  Car              mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
  <chr>          <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Hornet 4 Drive  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
2 Valiant         18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
3 Merc 280        19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4

[[3]]
# A tibble: 3 x 12
  Car                 mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
  <chr>             <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Hornet Sportabout  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
2 Duster 360         14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
3 Merc 450SE         16.4     8  276.   180  3.07  4.07  17.4     0     0     3     3

[[4]]
# A tibble: 3 x 12
  Car           mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
  <chr>       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Datsun 710   22.8     4 108      93  3.85  2.32  18.6     1     1     4     1
2 Fiat 128     32.4     4  78.7    66  4.08  2.2   19.5     1     1     4     1
3 Honda Civic  30.4     4  75.7    52  4.93  1.62  18.5     1     1     4     2

[[5]]
# A tibble: 3 x 12
  Car             mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
  <chr>         <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Mazda RX4      21       6   160   110  3.9   2.62  16.5     0     1     4     4
2 Mazda RX4 Wag  21       6   160   110  3.9   2.88  17.0     0     1     4     4
3 Ferrari Dino   19.7     6   145   175  3.62  2.77  15.5     0     1     5     6

[[6]]
# A tibble: 2 x 12
  Car              mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
  <chr>          <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Ford Pantera L  15.8     8   351   264  4.22  3.17  14.5     0     1     5     4
2 Maserati Bora   15       8   301   335  3.54  3.57  14.6     0     1     5     8

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章