考虑以下向量(或数据帧或数据表)
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, 2和2, 2, 2长度4和3.因此,这种状态的"平均"长度是(4 + 3)/2 = 3.5.
我的实际数据集的状态为1-9,向量中有超过1,000,000个点.我的困难是"打破"向量并计算细分.我正在使用R,但伪代码会很好.
注意:如果有人能想出更好的标题,请告诉我或提交编辑.
你可以结合使用?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)