尝试在R中计算保留率,如何将具有相同日期的一行除以另一行,然后在整个数据帧中应用相同的逻辑?



我正在尝试计算同一日期内Instagram故事的保留率(最后一帧的#观众除以第一帧的#观众(。我在 R 中的数据框中有这些数据,其中每个帧都列为一行,任何具有相同日期的帧构成了该日期的整个故事。我很难弄清楚如何在同一日期内获取第一帧和最后一帧的索引,然后将它们除以然后将其应用于数据帧的其余部分?任何帮助将不胜感激!

由于您尚未提供数据或可重现的示例,因此我必须做出一些假设。首先,我需要尝试根据数据框的描述重新创建数据框。听起来看起来像这样:

df
#>        dates views
#> 1  2020-01-01    32
#> 2  2020-01-01    28
#> 3  2020-01-01    28
#> 4  2020-01-01    28
#> 5  2020-01-02    28
#> 6  2020-01-02    26
#> 7  2020-01-02    26
#> 8  2020-01-02    25
#> 9  2020-01-03    25
#> 10 2020-01-03    25
#> 11 2020-01-03    25
#> 12 2020-01-03    25
#> 13 2020-01-04    23
#> 14 2020-01-04    20
#> 15 2020-01-04    20
#> 16 2020-01-04    20
#> 17 2020-01-05    18
#> 18 2020-01-05    17
#> 19 2020-01-05    17
#> 20 2020-01-05    17
#> 21 2020-01-06    15
#> 22 2020-01-06    13
#> 23 2020-01-06    12
#> 24 2020-01-06    10

因此,当然,仅当您用df替换数据框的名称,并将datesviews替换为相应的列名称时,以下代码才有效。我还假设每个日期组中的条目从最早到最新排序,因为这就是您的问题所暗示的。如果是这种情况,那么您可以执行以下操作:

result <- do.call("rbind", lapply(split.data.frame(df, df$dates), function(x){
data.frame(date = x$dates[1], retention = x$views[nrow(x)] / x$views[1])}))
rownames(result) <- 1:nrow(result)

这给你这个:

result
#>         date retention
#> 1 2020-01-01 0.8750000
#> 2 2020-01-02 0.8928571
#> 3 2020-01-03 1.0000000
#> 4 2020-01-04 0.8695652
#> 5 2020-01-05 0.9444444
#> 6 2020-01-06 0.6666667

相关内容

最新更新