Перестановка переменных с помощью выбора dplyr и всего () - PullRequest
0 голосов
/ 17 марта 2019

Я хотел бы переставить переменные в фрейме данных, используя dplyr's select и everything().

Создать фрейм данных.

> library(dplyr)
> X <- tibble(a = seq(0, 10),
              b = seq(10, 20),
              c = seq(20, 30),
              d = seq(30, 40),
              e = seq(40, 50))

Я могу переместить c в начало списка.

> X %>% select(c, everything())
# A tibble: 11 x 5
       c     a     b     d     e
   <int> <int> <int> <int> <int>
 1    20     0    10    30    40
 2    21     1    11    31    41
 3    22     2    12    32    42
 4    23     3    13    33    43
 5    24     4    14    34    44
 6    25     5    15    35    45
 7    26     6    16    36    46
 8    27     7    17    37    47
 9    28     8    18    38    48
10    29     9    19    39    49
11    30    10    20    40    50

Но если я хочу переместить c в конец списка, это не сработает.

> X %>% select(everything(), c)
# A tibble: 11 x 5
       a     b     c     d     e
   <int> <int> <int> <int> <int>
 1     0    10    20    30    40
 2     1    11    21    31    41
 3     2    12    22    32    42
 4     3    13    23    33    43
 5     4    14    24    34    44
 6     5    15    25    35    45
 7     6    16    26    36    46
 8     7    17    27    37    47
 9     8    18    28    38    48
10     9    19    29    39    49
11    10    20    30    40    50

Однако следующее завершает перемещение c в конец.

> X %>% select(-c, everything(), c)
# A tibble: 11 x 5
       a     b     d     e     c
   <int> <int> <int> <int> <int>
 1     0    10    30    40    20
 2     1    11    31    41    21
 3     2    12    32    42    22
 4     3    13    33    43    23
 5     4    14    34    44    24
 6     5    15    35    45    25
 7     6    16    36    46    26
 8     7    17    37    47    27
 9     8    18    38    48    28
10     9    19    39    49    29
11    10    20    40    50    30

Но можем ли мы сделать оба? То есть мы можем переместить что-то вперед, что-то до конца. Например, можно ли переместить b вперед и c в конец?

Это не работает. c необходимо перейти к концу.

> X %>% select(b, -c, everything(), c)
# A tibble: 11 x 5
       b     a     c     d     e
   <int> <int> <int> <int> <int>
 1    10     0    20    30    40
 2    11     1    21    31    41
 3    12     2    22    32    42
 4    13     3    23    33    43
 5    14     4    24    34    44
 6    15     5    25    35    45
 7    16     6    26    36    46
 8    17     7    27    37    47
 9    18     8    28    38    48
10    19     9    29    39    49
11    20    10    30    40    50

Это не работает. b не перемещается в начало.

> X %>% select(-c, b, everything(), c)
# A tibble: 11 x 5
       a     b     d     e     c
   <int> <int> <int> <int> <int>
 1     0    10    30    40    20
 2     1    11    31    41    21
 3     2    12    32    42    22
 4     3    13    33    43    23
 5     4    14    34    44    24
 6     5    15    35    45    25
 7     6    16    36    46    26
 8     7    17    37    47    27
 9     8    18    38    48    28
10     9    19    39    49    29
11    10    20    40    50    30

Итак, мой вопрос: используя select и everything(), могу ли я переместить некоторые переменные в начало списка, а некоторые - в конец, а все остальное между ними?

Ответы [ 2 ]

2 голосов
/ 17 марта 2019

Это перемещает c в конец:

select(X, -c, c)

дает:

# A tibble: 11 x 5
       a     b     d     e     c
   <int> <int> <int> <int> <int>
 1     0    10    30    40    20
 2     1    11    31    41    21
 3     2    12    32    42    22
 4     3    13    33    43    23
 5     4    14    34    44    24
 6     5    15    35    45    25
 7     6    16    36    46    26
 8     7    17    37    47    27
 9     8    18    38    48    28
10     9    19    39    49    29
11    10    20    40    50    30

Это перемещает b вперед и c в конец:

select(X, b, everything(), -c, c)

дает:

# A tibble: 11 x 5
       b     a     d     e     c
   <int> <int> <int> <int> <int>
 1    10     0    30    40    20
 2    11     1    31    41    21
 3    12     2    32    42    22
 4    13     3    33    43    23
 5    14     4    34    44    24
 6    15     5    35    45    25
 7    16     6    36    46    26
 8    17     7    37    47    27
 9    18     8    38    48    28
10    19     9    39    49    29
11    20    10    40    50    30
0 голосов
/ 17 марта 2019

Вот одно из решений.По сути, вы выбираете b и c в качестве первого и последнего столбца.Остальные имена столбцов получаются с: names(X)[!names(X) %in% c("b","c")]

X %>% select(b, names(X)[!names(X) %in% c("b","c")], c)
# A tibble: 11 x 5
       b     a     d     e     c
   <int> <int> <int> <int> <int>
 1    10     0    30    40    20
 2    11     1    31    41    21
 3    12     2    32    42    22
 4    13     3    33    43    23
 5    14     4    34    44    24
 6    15     5    35    45    25
 7    16     6    36    46    26
 8    17     7    37    47    27
 9    18     8    38    48    28
10    19     9    39    49    29
11    20    10    40    50    30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...