【发布时间】:2018-04-08 08:06:30
【问题描述】:
我有一个命名的数值向量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,但最终不会成为命名逻辑向量。
【问题讨论】:
-
setNames(seq_along(vec_sort) %in% 1:3, names(vec_sort)) -
@Henrik 你的版本也有效!!谢谢。您可以将其发布为答案。
标签: r sorting vector logical-operators relational-operators