2015-05-06 67 views
6

我正在尝试根据列中的特定值对子矩阵进行子集划分。但是我希望我的子集有许多独立的矩阵。对于例如,说我有一个矩阵cccR - 根据条件对子组矩阵进行子集

aaa=c(1,1,1,2,5,1,2,1,1,3,1,1,1,1,1,1,4) 
bbb=c(4,4,4,4,3,3,3,3,2,2,2,2,3,4,5,6,7) 
ccc=cbind(aaa,bbb) 

我想用的条件是ccc[,1]==1,并在同一时间我想要的子集被划分成由一个断裂点分隔的几个矩阵到子集。休息时间基于aaa==1的运行。为了明确这一点,我需要我的输出以下面的方式,

ddd1 
    aaa bbb 
[1,] 1 4 
[2,] 1 4 
[3,] 1 4 

ddd2 
aaa bbb 
    1 3 

ddd3 
    aaa bbb 
[1,] 1 3 
[2,] 1 2 

ddd4 
    aaa bbb 
[1,] 1 2 
[2,] 1 2 
[3,] 1 3 
[4,] 1 4 
[5,] 1 5 
[6,] 1 6 

ddd1,..,ddd4作为子矩阵。我希望我说清楚。任何建议如何做到这一点?

+3

你的破发点不明确的。休息背后的逻辑是什么? 'ccc $ aaa'也不能用,因为你有一个矩阵,'$'只适用于data.frames/lists。你的意思是使用'ccc < - data.frame(aaa,bbb)'? – thelatemail

+2

@thelatemail拆分是基于'aaa == 1'的运行,我认为 – Frank

回答

5

使用splitcumsum

ccc <- data.frame(ccc) 
split(ccc[ccc$aaa==1,], cumsum(ccc$aaa!=1)[ccc$aaa==1]) 

#$`0` 
# aaa bbb 
#1 1 4 
#2 1 4 
#3 1 4 
# 
#$`2` 
# aaa bbb 
#6 1 3 
# 
#$`3` 
# aaa bbb 
#8 1 3 
#9 1 2 
# 
#$`4` 
# aaa bbb 
#11 1 2 
#12 1 2 
#13 1 3 
#14 1 4 
#15 1 5 
#16 1 6 
+0

非常感谢。我以前没有用过'分裂'。我正在努力与循环。 – user3420448