Переместить столбец, основанный на его имени, после столбца, основанного на его имени в R - PullRequest
0 голосов
/ 18 февраля 2020

Я хотел бы иметь возможность перемещать столбцы в желаемую позицию, основываясь исключительно на имени столбцов, я хотел бы перемещать столбец по имени в нужную позицию после столбца с определенным именем.

В качестве примера можно использовать радужную оболочку данных.

Пример:

data(iris)

Фактический порядок столбцов:

> colnames(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species" 

Я хотел бы поставить «Лепесток». Ширина "после" Sepal.Length "по именам, использующим код, и избегайте ручного ввода, например, выбора решений с помощью dplyr.

Заранее большое спасибо.

1 Ответ

0 голосов
/ 18 февраля 2020

Если я вас правильно понимаю, вы можете добиться того, что хотите, используя select, манипулируя вектором имен столбцов.

Сначала вам нужна функция, которая принимает вектор имен (предполагается, что он уникален), и две указанные c записи a и b и перемещение a за b. Я думаю, что эта функция помогает (даже если она выглядит немного неуклюже).

move <- function(names, a, b) {
  names_without_a <- names[which(names != a)]
  b_pos <- which(names_without_a == b)
  c(names_without_a[1:b_pos], 
    a, 
    names_without_a[(b_pos+1):length(names_without_a)])
}

Теперь вы можете использовать select, например, так:

df <- 
  iris %>% 
  select(move(colnames(iris), 'Petal.Width', 'Sepal.Length'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...