我有一个矩阵:
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)
谢谢,
答案 0 :(得分:3)
尝试:
tapply( x, findInterval( x, vec) ,'[')
如果你想使用x [vec]作为断点,那么只需使用它作为findInterval的第二个参数。
答案 1 :(得分: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]}
}
)
答案 2 :(得分:0)
这是一种使用分割和填充vec
中间值的方法。如果vec
未以length(x)
结束预期警告(但结果仍然正确):
split(x, rep(vec, c(diff(vec), 1)))