我有以下 data.frame
,其中 time
列按升序排序:
colA=c(1,2,5,6,7,10,13,16,19,20,25,40,43,44,50,51,52,53,68,69,77,79,81,82)
colB=rnorm(24)
df=data.frame(time=colA, x=colB)
如何计算并取 time
列中观察到的连续时间步长的平均值?
具体来说,我需要根据连续观察对 time
列中的行进行分组,例如1,2 和 5,6,7 和 19,20 和 43,44 等等...然后取每组长度的平均值。
最佳答案
您可以像这样对连续观察的集群进行分组:
df$group <- c(0, cumsum(diff(df$time) != 1)) + 1
给出:
df
#> time x group
#> 1 1 0.7443742 1
#> 2 2 0.1289818 1
#> 3 5 1.4882743 2
#> 4 6 -0.6626820 2
#> 5 7 -1.1606550 2
#> 6 10 0.3587742 3
#> 7 13 -0.1948464 4
#> 8 16 -0.2952820 5
#> 9 19 0.4966404 6
#> 10 20 0.4849128 6
#> 11 25 0.0187845 7
#> 12 40 0.6347746 8
#> 13 43 0.7544441 9
#> 14 44 0.8335890 9
#> 15 50 0.9657613 10
#> 16 51 1.2938800 10
#> 17 52 -0.1365510 10
#> 18 53 -0.4401387 10
#> 19 68 -1.2272839 11
#> 20 69 -0.2376531 11
#> 21 77 -0.9268582 12
#> 22 79 0.4112354 13
#> 23 81 -0.1988646 14
#> 24 82 -0.5574496 14
您可以通过以下方式获得这些组的长度:
rle(df$group)$lengths
#> [1] 2 3 1 1 1 2 1 1 2 4 2 1 1 2
连续组的平均长度为:
mean(rle(df$group)$lengths)
#> [1] 1.714286
和每组内x的平均值使用
tapply(df$x, df$group, mean)
#> 1 2 3 4 5 6 7
#> 0.4366780 -0.1116876 0.3587742 -0.1948464 -0.2952820 0.4907766 0.0187845
#> 8 9 10 11 12 13 14
#> 0.6347746 0.7940166 0.4207379 -0.7324685 -0.9268582 0.4112354 -0.3781571
关于R,在 data.frame 中找到连续时间步长的平均长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71661341/