Выборочная (или частичная) сортировка векторных элементов в R - PullRequest
0 голосов
/ 29 июня 2018

У меня есть вектор с именем myvec<- c("B","C","D","A"). Я хочу расположить элементы C и D первыми и вторыми, затем B и A. Таким образом, результат должен быть C,D,B,A. Как мы можем сделать это в R?

Ответы [ 3 ]

0 голосов
/ 29 июня 2018

Вы можете использовать factor

 sort(factor(myvec <- sample(myvec, 20, T),c('C', 'D', 'B', 'A')))
 [1] C C C D D D D D D B B B B B B A A A A A
Levels: C D B A
0 голосов
/ 29 июня 2018

Обычно я использую setdiff (), когда хочу удалить элементы из вектора

myvec <- c("B","C","D","A")
put_first <- c("C", "D")
new_vec <- c(put_first, setdiff(myvec, put_first))
new_vec
# [1] "C" "D" "B" "A"

Отредактировано Если вы хотите, чтобы это учитывало множители в данных.

myvec <- c("B", "B","C", "C","D", "D", "A", "A")
put_first <- c("C", "D")
new_vec <- c(myvec[myvec %in% put_first], myvec[!myvec %in% put_first])
new_vec
# [1] "C" "C" "D" "D" "B" "B" "A" "A"
0 голосов
/ 29 июня 2018

Чтобы просто вывести "C" и "D" на фронт:

myvec <- c("B","C","D","A")

myvec[order(!myvec %in% c('C', 'D'))]
#[1] "C" "D" "B" "A"

Чтобы сделать полный заказ:

myvec <- c("B","C","D","A")

order.vec <- c('C', 'D', 'B', 'A')

myvec[order(match(myvec, order.vec))]
# [1] "C" "D" "B" "A"

Пример с другим входным вектором:

myvec <- sample(myvec, 20, T)

myvec[order(match(myvec, order.vec))]
# [1] "C" "C" "C" "C" "C" "C" "D" "D" "D" "D" "D" "D" "B" "B" "B" "A" "A" "A" "A" "A"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...