r указать первый элемент в векторе - PullRequest
2 голосов
/ 07 мая 2020

У меня есть вектор из сотен животных (ни одно из которых не повторяется), и я хочу, чтобы «кит» был первым. Меня не волнует порядок других элементов, и я не могу указать что-то вроде алфавитного порядка. Как мне сделать что-то вроде этого:

animals <- c("cat", "dog", "whale", "pig", "zebra", "emu")

Выглядеть вот так, без повторного ввода каждого элемента:

whale_first <- c("whale", "cat", "dog", "pig", "zebra", "emu")

Я пробовал смотреть sort () и str_order (), но Я не мог найти способ указать только первый элемент. Кроме того, в окончательном ответе не имеет значения порядок других животных. В моем примере все они были в одном порядке, кроме кита, но я приму всех остальных животных в любом порядке.

Спасибо!

Ответы [ 3 ]

1 голос
/ 07 мая 2020

Однострочным является setdiff (при условии отсутствия дубликатов)

c("whale", setdiff(animals, 'whale'))

Если есть дубликаты, используйте vsetdiff

library(vecsets)
c("whale", vsetdiff(animals, 'whale'))
1 голос
/ 07 мая 2020

обмен:

first <- animals[1]
i <- grep("whale", animals)
animals[1] <- animals[i]
animals[i] <- first

если вам все равно:

i <- grep("whale", animals)
c(animals[i],animals[-i])

конечно, вы также можете сделать:

c("whale", grep("whale", animals, value = TRUE, invert=TRUE))
0 голосов
/ 07 мая 2020

Базовый метод R, безопасный для дубликатов, - это переупорядочить факторы:

animals = factor(animals)
levels(animals) = c('whale', setdiff(levels(animals), 'whale'))
animals = as.character(animals)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...