计算分裂矢量的平均长度

mas*_*nix 4 r pseudocode

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

a = data.frame(x = c(2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1))
Run Code Online (Sandbox Code Playgroud)

x代表一个'状态',1或2.矢量数据代表空间数据,我希望获得每个州的平均长度.换句话说,我们看到,对于固定state = 2,有两个部分:2, 2, 2, 22, 2, 2长度43.因此,这种状态的"平均"长度是(4 + 3)/2 = 3.5.

我的实际数据集的状态为1-9,向量中有超过1,000,000个点.我的困难是"打破"向量并计算细分.我正在使用R,但伪代码会很好.

注意:如果有人能想出更好的标题,请告诉我或提交编辑.

sgi*_*ibb 5

你可以结合使用?rle和解决这个问题?tapply. rle计算连续元素的数量并存储它们lengths和相应的值values.tapply用于计算groupwise mean:

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