0

我有一个矩阵:

x<-matrix(c(1,2,3,4,5,6,7,8,9,10),nrow=10,ncol=1)

和一个索引:

vec<-c(1,4,7,8,9,10)

我想获得小于下一个索引的所有元素。因此,在给定上述索引向量的上述示例中,我希望看到类似的内容:

1,2,3
4,5,6
7
8
9
10

我目前正在使用 for 循环:

for(i in 2:length(vec)){
  cat(x[(vec[i-1]):(vec[i]-1)],"\n")

}

这很好用,但它不返回最后一个元素 10。

有任何想法吗?

有人可以试试这个例子吗,我的 R 会话似乎返回了错误的值:

vec<-c(1,7, 10, 11, 12)
x<- c(251, 272, 291, 314, 333, 355, 377, 397, 420, 440, 462, 483, 503)

谢谢,

4

3 回答 3

3

尝试:

tapply( x,  findInterval( x,  vec) ,'[')

如果您想使用 x[vec] 作为断点,那么只需将其用作 findInterval 的第二个参数。

于 2013-06-05T19:41:12.910 回答
0

这是一种使用拆分并使用vec中间值填充您的方法。如果vec没有以length(x)期望警告结束(但仍然是正确的结果):

split(x, rep(vec, c(diff(vec), 1)))
于 2013-06-05T20:06:48.447 回答
0

尝试这个:

lapply(1:length(vec)
   ,function(i){
     min_ix = vec[i]
     max_ix = vec[i+1]
     if(i<length(vec)){x[x<max_ix & x>=min_ix]}
     else{x[x>=min_ix]}
     }
)
于 2013-06-05T19:50:09.857 回答