【问题标题】:Named Numeric Vector (in ascending order) to Named Logical Vector based on condition基于条件的命名数字向量(按升序)到命名逻辑向量
【发布时间】: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,如果我尝试将其分配给 TRUEFALSE,结果是一个命名数字向量希望将 1 显示为 TRUE,将 0 显示为 FALSE,但最终不会成为命名逻辑向量。

【问题讨论】:

  • setNames(seq_along(vec_sort) %in% 1:3, names(vec_sort))
  • @Henrik 你的版本也有效!!谢谢。您可以将其发布为答案。

标签: r sorting vector logical-operators relational-operators


【解决方案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 

【讨论】:

  • 非常感谢。它运作良好。尝试了您发布的第一个,它很长但有效。将不得不尝试这些。通过关系运算符有什么办法吗?
  • 能否请您附上您发布的第一版命令。
  • 我命名的数字向量的长度为 20000+,最小值出现了 2000 次。因此,基本上对于您发布的每个命令,都不应该导致向量名称的丢失。他们都有效!谢谢,学习所有这些功能。我完全忘记了replace( )
猜你喜欢
  • 2020-05-24
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多