计算分裂向量的平均长度

时间:2015-06-06 20:01:49

标签: r pseudocode

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

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,但伪代码会很好。

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

1 个答案:

答案 0 :(得分:5)

您可以结合使用?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