【发布时间】:2018-04-12 13:12:45
【问题描述】:
我有一个矩阵,其中每个元素都是 0 或 1。 我想获得每行中连续出现 0 的频率,因为序列中的最后一个 0 后面跟着一个 1。
例如:
一行有:0, 1, 0, 1, 0, 0
预期的结果应该是:
连续的 0 长度:1
频率:2
另一行有:0, 1, 0, 0, 1, 0, 0, 0, 1
预期结果:
连续 0 的长度:1 2 3
频率:1 1 1
然后,另一个目标是对相同长度的频率求和,以便知道有多少次单个 0 后面跟着一个 1,两个连续的 0 后面跟着一个 1 等等。
这是我想在其上应用例程的示例矩阵:
m = matrix( c(1, 0, 1, 1, 1, 1, 0, 0, 0, 0,
1, 1, 1, 1, 0, 1, 0, 0, 0, 0,
1, 0, 0, 0, 1, 1, 1, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0, 1, 1, 1,
1, 1, 1, 0, 0, 0, 0, 0, 1, 0,
1, 0, 0, 0, 0, 0, 1, 1, 0, 0),
ncol = 10, nrow = 6, byrow=TRUE)
预期的结果应该类似于下面的矩阵:
result = matrix( c(3, 0, 1, 0, 3, 0, 0, 0, 0, 0), ncol=10, nrow=1)
colnames(result) <- c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")
其中列名是连续 0 的长度(后跟 1),矩阵条目是相应的频率。
请注意,我有一个非常大的数据矩阵,如果可能的话,我想避免循环。感谢您的任何提示、cmets 和建议。
【问题讨论】:
-
您能否展示您展示的示例的预期输出
-
类似这样的东西:
apply(m, 1, rle)? -
我尝试了 rle() 但我认为,在这个版本中,很难获得预期的输出表。