динамически поднабор данных в 2 столбца в пределах - PullRequest
1 голос
/ 03 апреля 2020

В этом примере я подстраиваю фрейм данных внутри лапы для всех возможных уровней в 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

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Вот подход с использованием 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
0 голосов
/ 03 апреля 2020

Вы можете использовать функцию map следующим образом

columns = c("am", "cyl")
map(columns, function(a)   lapply(unique(mtcars[, a]), function(x) {
  tempDf <- head(mtcars[mtcars[, a] %in% x, ])

  return(tempDf)

}))

с выходом

[[1]]
[[1]][[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

[[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


[[2]]
[[2]][[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
Hornet 4 Drive 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Valiant        18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Merc 280       19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C      17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4

[[2]][[2]]
                mpg cyl  disp hp drat    wt  qsec vs am gear carb
Datsun 710     22.8   4 108.0 93 3.85 2.320 18.61  1  1    4    1
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
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]][[3]]
                    mpg cyl  disp  hp drat   wt  qsec vs am gear carb
Hornet Sportabout  18.7   8 360.0 175 3.15 3.44 17.02  0  0    3    2
Duster 360         14.3   8 360.0 245 3.21 3.57 15.84  0  0    3    4
Merc 450SE         16.4   8 275.8 180 3.07 4.07 17.40  0  0    3    3
Merc 450SL         17.3   8 275.8 180 3.07 3.73 17.60  0  0    3    3
Merc 450SLC        15.2   8 275.8 180 3.07 3.78 18.00  0  0    3    3
Cadillac Fleetwood 10.4   8 472.0 205 2.93 5.25 17.98  0  0    3    4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...