Именованный числовой вектор (в порядке возрастания) для Именованного логического вектора на основе условия

У меня есть именованный числовой вектор vec, затем он был отсортирован в порядке возрастания и сохранен в объекте vec_sort, как показано ниже.

vec <- c(1,1,1,2,3,1,5)
names(vec) <- letters[1:7]
vec
# a b c d e f g 
# 1 1 1 2 3 1 5 

str(vec)
# Named num [1:7] 1 1 1 2 3 1 5
# - attr(*, "names")= chr [1:7] "a" "b" "c" "d" ...

Сортировка по возрастанию (Именованный цифровой вектор)

vec_sort <- sort(vec)
vec_sort
# a b c f d e g 
# 1 1 1 1 2 3 5 

str(vec_sort)
# Named num [1:7] 1 1 1 1 2 3 5
# - attr(*, "names")= chr [1:7] "a" "b" "c" "f" ...

ТРЕБУЕТСЯ ВЫХОД

Именованный логический вектор, где в элементе First 3 возрастающего числа числовой вектор будет TRUE, остальное FALSE. Даже если 4-й элемент совпадает с первым 3-мя элементами. т.е. самое низкое значение. Использование реляционных операторов или их назначение могут быть.

vec_sort
# a b c f d e g 
# 1 1 1 1 2 3 5 

К

vec_sort
#    a     b     c     f     d     e     g 
# TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE 

Попытки кодов

первый

vec_sort[1:3] <- TRUE
vec_sort[4:length] <- FALSE

vec_sort
# a b c f d e g 
# 1 1 1 0 0 0 0 

Не логично

str(vec_sort)
# Named num [1:7] 1 1 1 0 0 0 0
- attr(*, "names")= chr [1:7] "a" "b" "c" "f" ...

второй

 vec_sort <= min(vec_sort)
 #    a     b     c     f     d     e     g 
 # TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE 

Здесь 4-я переменная f также имеет значение TRUE поскольку условие задано таким образом. это минимум, но из минимума также я хочу установить только верхние 3 в TRUE

Было предпринято еще много логических условий, но все это приводит к тому, что первые 4 как TRUE и если я попытаюсь назначить его TRUE или FALSE это будет Именованный числовой вектор, который, надеюсь, будет 1 как TRUE и 0 как FALSE, но не заканчивается Именованный логический вектор.

2
26 окт. '17 в 23:01
источник поделиться
1 ответ
setNames(as.logical(replace(replace(vec_sort, TRUE, FALSE), 1:3, TRUE)), names(vec_sort))
#OR
setNames(as.logical(replace(vec_sort * 0, 1:3, 1)), names(vec_sort))
#OR
setNames(c(rep(TRUE, 3), rep(FALSE, length(vec_sort)-3)), names(vec_sort))
#OR
replace(vec_sort == max(vec_sort) + 999, 1:3, TRUE)
#   a     b     c     f     d     e     g 
#TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE 
4
26 окт. '17 в 23:09
источник

Посмотрите другие вопросы по меткам или Задайте вопрос