r-基于条件的命名数字矢量(按升序)到命名逻辑矢量



我有一个命名的数字向量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" ...

需要输出

一个命名逻辑向量,其中升序数字向量的前3个元素为TRUE,其余为FALSE。即使第4个元素与前3个元素相同。即最低值。使用关系运算符或通过分配它可能是.

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

TO

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 

这里,第四变量f也变成TRUE,因为条件是这样设置的。这是最小值,但从最小值开始,我只想将前3名设置为TRUE

尝试了更多的逻辑条件,但结果都是前4个为TRUE,如果我尝试将其分配给TRUEFALSE,结果是一个命名数字矢量,希望1显示为TRUE,0显示为FALSE,但最终不是命名逻辑矢量。

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 

相关内容

  • 没有找到相关文章

最新更新