R,在 data.frame 中找到连续时间步长的平均长度

标签 r dataframe group

我有以下 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/

相关文章:

regex - R 使用 tidyr::separate 在最后一个空白字符处拆分字符串

r - 点边标签中的下标和希腊字母

mysql - 使用 R 和 ORDBC 在数据库的单个表上插入数据框

python - 在 Pandas 中如何从另一列的观察和聚合值创建新列

按组多次重新排列列并将结果放入新列中

通过在 purrr 中按元素求和来减少列表

读取带有多个分隔符的txt文件

python - bool 索引以将虚假值保留为 NaN

r - 选择前 5 行并保持某一行固定

r - 将数据框中的行分配给 3 组?