удалить n самых маленьких элементов из вектора, включая повторяющиеся элементы - PullRequest
0 голосов
/ 24 июня 2018

У меня есть следующий вектор:

v = c(1,2,3,1,3,2,3,4,3,3,1, 5, 5,2)

Я хотел бы получить вектор

v_new = c(3,3,2,3,4,3,3,5,2,2)

, из которого я удалил первые наименьшие элементы 1, 1, 1, 2. Пожалуйста, обратите внимание, что я не хочу удалять другое вхождение числа 2. Функция order почти дает мне то, что мне нужно, за исключением того, что его вывод является странным, потому что он заботится о том, чтобы v [order (v)] приводил элементы в возрастающем порядке и не давал ранг элементов. rank также дает что-то странное:

v[rank(v)]
 [1] 2 3 3 2 3 3 3 5 3 3 2 5 5 3

Любая помощь будет высоко ценится.

1 Ответ

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

order - это то, что вам нужно, но чтобы оно работало, вам нужна отрицательная индексация.Само по себе order возвращает набор индексов, которые будут сортировать входной вектор:

v = c(1,2,3,1,3,2,3,4,3,3,1,5,5,2)

order(v)
#>  [1]  1  4 11  2  6 14  3  5  7  9 10  8 12 13

v[order(v)]
#>  [1] 1 1 1 2 2 2 3 3 3 3 3 4 5 5

Вы можете использовать отрицательное индексирование для удаления элементов из вектора:

(5:1)[c(-1, -2)]
#> [1] 3 2 1

Помещениедва вместе, чтобы удалить наименьшие элементы из вектора, отвергнуть первые n элементов результатов order:

v[-order(v)[1:4]]
#>  [1] 3 3 2 3 4 3 3 5 5 2

Обратите внимание, что order индексирует связанные элементы спереди, поэтомупервый 2 - тот, который удален.

...