【问题标题】:R - Subsetting to group of matrices based on a conditionR - 基于条件的矩阵组子集
【发布时间】:2015-05-06 00:16:37
【问题描述】:

我正在尝试根据列中的特定值对矩阵进行子集化。但我希望我的子集在许多单独的矩阵中。例如,假设我有一个矩阵 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 是子集矩阵。我希望我说清楚了。有什么建议吗?

【问题讨论】:

  • 你的断点一点都不清楚。中断背后的逻辑是什么? ccc$aaa 也不能用于矩阵,$ 仅适用于 data.frames/lists。你的意思是使用ccc <- data.frame(aaa,bbb)
  • @thelatemail 我认为拆分是基于aaa==1的运行

标签: r subset


【解决方案1】:

使用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

【讨论】:

  • 非常感谢。我以前没有使用过“拆分”。我在循环中挣扎。
猜你喜欢
  • 1970-01-01
  • 2018-04-23
  • 2014-12-08
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
  • 2022-08-19
相关资源
最近更新 更多