考虑以下向量(或数据帧或数据表)
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,但伪代码会很好。
注意:如果有人能提出更好的标题,请告诉我或提交编辑。
答案 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