R - 基于条件子集到矩阵组

时间:2015-05-06 00:16:38

标签: r subset

我正在尝试根据列中的特定值对矩阵进行子集化。但我希望我的子集在许多单独的矩阵中。例如,假设我有一个矩阵ccc

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是子集矩阵。我希望我说清楚。有什么建议吗?

1 个答案:

答案 0 :(得分: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