R: динамический вызов в зависимости от того, какие столбцы включены - PullRequest
0 голосов
/ 24 июня 2019

Я хочу сделать мой arrange вызов динамическим.В настоящее время все возможные различные столбцы можно найти в данных (SQL_Table) ниже:

# A tibble: 144,000 x 15
   plan  class gender band  marital_status acceleration extension inflation iss_age cell    dur db_perk accel_perk ext_perk
   <chr> <dbl> <chr>  <chr> <chr>          <chr>        <chr>     <chr>     <chr>   <chr> <dbl>   <dbl>      <dbl>    <dbl>
 1 Basi~   111 F      1a    Married        A.24         E.0       AC3.EC3   40      Basi~     1   0.196     0.0035       NA
 2 Basi~   111 F      1a    Married        A.24         E.0       AC3.EC3   40      Basi~     2   0.231     0.0148       NA
 3 Basi~   111 F      1a    Married        A.24         E.0       AC3.EC3   40      Basi~     3   0.375     0.032        NA
 4 Basi~   111 F      1a    Married        A.24         E.0       AC3.EC3   40      Basi~     4   0.399     0.0528       NA
 5 Basi~   111 F      1a    Married        A.24         E.0       AC3.EC3   40      Basi~     5   0.451     0.0767       NA
 6 Basi~   111 F      1a    Married        A.24         E.0       AC3.EC3   40      Basi~     6   0.513     0.0997       NA
 7 Basi~   111 F      1a    Married        A.24         E.0       AC3.EC3   40      Basi~     7   0.595     0.121        NA
 8 Basi~   111 F      1a    Married        A.24         E.0       AC3.EC3   40      Basi~     8   0.678     0.145        NA
 9 Basi~   111 F      1a    Married        A.24         E.0       AC3.EC3   40      Basi~     9   0.761     0.174        NA
10 Basi~   111 F      1a    Married        A.24         E.0       AC3.EC3   40      Basi~    10   0.844     0.207        NA
# ... with 143,990 more rows, and 1 more variable: attage <dbl>

Иногда в моих данных не все столбцы.Например, класс и полоса могут быть исключены:

# A tibble: 144,000 x 13
   plan   gender marital_status acceleration extension inflation iss_age cell          dur db_perk accel_perk ext_perk attage
   <chr>  <chr>  <chr>          <chr>        <chr>     <chr>     <chr>   <chr>       <dbl>   <dbl>      <dbl>    <dbl>  <dbl>
 1 BasicF F      Married        A.24         E.0       AC3.EC3   40      BasicFF240~     1   0.196     0.0035       NA     41
 2 BasicF F      Married        A.24         E.0       AC3.EC3   40      BasicFF240~     2   0.231     0.0148       NA     42
 3 BasicF F      Married        A.24         E.0       AC3.EC3   40      BasicFF240~     3   0.375     0.032        NA     43
 4 BasicF F      Married        A.24         E.0       AC3.EC3   40      BasicFF240~     4   0.399     0.0528       NA     44
 5 BasicF F      Married        A.24         E.0       AC3.EC3   40      BasicFF240~     5   0.451     0.0767       NA     45
 6 BasicF F      Married        A.24         E.0       AC3.EC3   40      BasicFF240~     6   0.513     0.0997       NA     46
 7 BasicF F      Married        A.24         E.0       AC3.EC3   40      BasicFF240~     7   0.595     0.121        NA     47
 8 BasicF F      Married        A.24         E.0       AC3.EC3   40      BasicFF240~     8   0.678     0.145        NA     48
 9 BasicF F      Married        A.24         E.0       AC3.EC3   40      BasicFF240~     9   0.761     0.174        NA     49
10 BasicF F      Married        A.24         E.0       AC3.EC3   40      BasicFF240~    10   0.844     0.207        NA     50
# ... with 143,990 more rows

Я хочу вызов arrange, который упорядочит мои данные по столбцам слева направо, заканчивающимся на «iss_age», а затем «dur» всегда в конце.

Для верхнего столбца мой вызов arrange будет выглядеть так:

SQL_Table %>%
  arrange(plan,class, gender,band,marital_status,acceleration, extension, inflation, iss_age, dur)

Для второго столбца это будет выглядеть так: (класс уведомления и группа исключены)

SQL_Table %>%
  arrange(plan,gender,marital_status, acceleration, extension, inflation,iss_age, dur)

Переменные, которые могут или не могут быть включены: план, класс, пол, диапазон, marital_status, ускорение, расширение и инфляция.

Остальные переменные всегда будут включены.

Есть ли способ сделать это динамически в зависимости от того, какие столбцы включены в мой набор данных?

1 Ответ

0 голосов
/ 24 июня 2019

arrange_at здесь полезен, поскольку позволяет определять столбцы с помощью конструкции vars().

Пример:

as.data.frame(Titanic) %>% 
  arrange_at(vars(everything()))
   Class    Sex   Age Survived Freq
1    1st   Male Child       No    0
2    1st   Male Child      Yes    5
3    1st   Male Adult       No  118
4    1st   Male Adult      Yes   57
5    1st Female Child       No    0
6    1st Female Child      Yes    1
7    1st Female Adult       No    4
8    1st Female Adult      Yes  140
9    2nd   Male Child       No    0
10   2nd   Male Child      Yes   11
11   2nd   Male Adult       No  154
12   2nd   Male Adult      Yes   14
13   2nd Female Child       No    0
14   2nd Female Child      Yes   13
15   2nd Female Adult       No   13
16   2nd Female Adult      Yes   80
17   3rd   Male Child       No   35
18   3rd   Male Child      Yes   13
19   3rd   Male Adult       No  387
20   3rd   Male Adult      Yes   75
21   3rd Female Child       No   17
22   3rd Female Child      Yes   14
23   3rd Female Adult       No   89
24   3rd Female Adult      Yes   76
25  Crew   Male Child       No    0
26  Crew   Male Child      Yes    0
27  Crew   Male Adult       No  670
28  Crew   Male Adult      Yes  192
29  Crew Female Child       No    0
30  Crew Female Child      Yes    0
31  Crew Female Adult       No    3
32  Crew Female Adult      Yes   20

В вашем случае вы можете попробовать:

SQL_Table %>% 
  arrange_at(vars(1:iss_age, dur))

Но ваши данные трудно читать.

Вы также можете использовать one_of для выбора переменных, которые могут или не могут бытьнет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...