[英]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个问题:
如何更好地在V2上编写操作,以使获得相同的结果? (我相信有更好的方法..?)
当我使用这种方法来操纵V1时会发生什么? 我根据结果假设,R根据V2的结果打印具有相同索引号的元素,然后回收相同的结果,以便打印与V2的元素的索引号相对应的元素。 这是正确的吗? 为什么以这种方式设计?
根据相同规则操作不同向量的好方法是什么? 如果我只想打印所有小于或等于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.