考虑以下向量(或数据框架或数据表)
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, 2
和2, 2, 2
,长度为4
和3
。因此,该状态的"平均"长度为(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