计算分割向量的平均长度

calculating the average length of split vector

考虑以下向量(或数据框或数据表)

a = data.frame(x = c(2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1))

x 表示 'state',1 或 2。矢量数据表示空间数据,我希望获得每个州的平均长度。换句话说,我们看到,对于 fixed state = 2,有两个段:2, 2, 2, 22, 2, 2,长度为 43。因此该状态的 'avg' 长度为 (4 + 3)/2 = 3.5

我的实际数据集具有 1-9 的状态,向量中有超过 1,000,000 个点。我的困难实际上是 'breaking' 向上向量和计算段数。我正在使用 R,但伪代码会很好。

注意:如果有人能想出更好的标题,请告诉我或提交修改。

您可以结合使用 ?rle?tapply 来解决这个问题。 rle统计连续元素的个数存入lengths,对应的值存入valuestapply用于计算groupwise mean:

r <- rle(a$x)
tapply(r$lengths, INDEX=r$values, FUN=mean)
#   1   2 
# 3.5 3.5