计算分割向量的平均长度



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

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

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

我的实际数据集具有从1到9的状态,并且在向量中有超过1,000,000个点。我的困难实际上是"分解"向量并计算片段。我正在使用R,但伪代码会很好。

注:如果有人能想出一个更好的标题,请让我知道或提交编辑。

您可以使用?rle?tapply的组合来解决这个问题。rle计算连续元素的个数,并将其存储在lengths中,将相应的值存储在values中。tapply用于计算分组mean:

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

最新更新