Сортировать только NA в конце вектора R - PullRequest
3 голосов
/ 30 марта 2020

Можно ли отсортировать вектор, в котором поддерживается порядок значений без пропусков / значений, отличных от NA, но значения NA в векторе сортируются до конца?

Например, могу ли я превратить этот вектор

vector<-c("Dog", "Cat", NA, "Tiger", NA, "Bear")

в этот

vector<-c("Dog","Cat","Tiger","Bear", NA, NA)

Ответы [ 4 ]

2 голосов
/ 30 марта 2020

Вы можете удалить значение NA, используя na.omit и подмножество до длины вектора, чтобы получить NA в конце.

na.omit(vector)[1:length(vector)]
#[1] "Dog"   "Cat"   "Tiger" "Bear"  NA      NA  
1 голос
/ 30 марта 2020

Может также сделать:

vector[order(is.na(vector))]

# [1] "Dog"   "Cat"   "Tiger" "Bear"  NA      NA 

TRUE (равно 1) больше, чем FALSE (равно 0), поэтому NA перемещаются в конец, а все TRUE в начале, без учета реальных строк.

Работает также с дублированными строками, например:

vector <- c("Dog", "Dog", "Cat", NA, "Tiger", NA, "Bear")

vector[order(is.na(vector))]

# [1] "Dog"   "Dog"   "Cat"   "Tiger" "Bear"  NA      NA  
1 голос
/ 30 марта 2020

Другой вариант может быть:

sort(factor(vector, levels = vector), na.last = TRUE)

[1] Dog   Cat   Tiger Bear  <NA>  <NA> 

Если некоторые строки могут быть продублированы:

sort(factor(vector, levels = unique(vector)), na.last = TRUE)
1 голос
/ 30 марта 2020

Просто order вектор, используя factor с соответствующими levels=.

vector[order(factor(vector, levels=vector))]
# [1] "Dog"   "Cat"   "Tiger" "Bear"  NA      NA     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...