我有命名的数字向量 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
以
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
,如果我尝试将其分配给TRUE
或FALSE
,则结果为命名数值向量显示希望1为TRUE,0为FALSE,但最终不会成为命名逻辑向量。
答案 0 :(得分:4)
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