繁体   English   中英

如何使用布尔向量在R中操纵(或建立索引)向量

[英]how to manipulate (or index) a vector in R, using a boolean vector

我试图操纵一个向量,使其被其他布尔向量索引:

#vector 1:
V1<-c(1,1,1,1,2,3,6,7,8,9) 

#vector 2:
v2<-c(1,2,3,4,5) 

#condition for manipulation:
boolean_vector<-v2<=3

#indexing using the boolean vector, based on the condition:
v2[boolean_vector] 
[1] 1 2 3 
V1[boolean_vector] 
[1] 1 1 1 3 6 7

这是我的3个问题:

  1. 如何更好地在V2上编写操作,以使获得相同的结果? (我相信有更好的方法..?)

  2. 当我使用这种方法来操纵V1时会发生什么? 我根据结果假设,R根据V2的结果打印具有相同索引号的元素,然后回收相同的结果,以便打印与V2的元素的索引号相对应的元素。 这是正确的吗? 为什么以这种方式设计?

  3. 根据相同规则操作不同向量的好方法是什么? 如果我只想打印所有小于或等于3的元素,然后能够在任何矢量上使用此规则?

谢谢,

首先,请注意,您的载体将被回收用于更长的载体(问题2)!

boolean_vector<-v2<=3
boolean_vector
[1]  TRUE  TRUE  TRUE FALSE FALSE

评估V1向量,该条件会将boolean_vector应用于V1[1:5] ,然后对V1[6:10]重复该过程。 这在行可能不严格表示相同大小的块的一般应用程序中不太有用。

对于特定条件,对向量本身使用布尔值(问题3)。

V1[V1 <= 3]
v2[v2 <= 3]

如果条件复杂,则最好像您一样将其结果保存到向量中(问题1)。 为了概括一个复杂的条件,您可能想要创建一个返回布尔向量的函数。

check <- function(x){
    res <- x <= 3
    return(res)
}

V1[check(V1)]
[1] 1 1 1 1 2 3
v2[check(v2)]
[1] 1 2 3

解决方案源于罗兰在我的问题中的评论。

也许您可以使用which()?

new_v<-V2[which(V2<=3)]

您可能应该阅读which()函数的简介。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM