2015-05-06 64 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