r - 尝试计算 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
数据框的名称和dates
适当views
的列名称时才有效。我还将假设每个日期组中的条目从最早到最晚排序,因为这就是您的问题所暗示的。如果是这种情况,那么您可以这样做:
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
推荐阅读
- python - 使用 mpifort 编译程序时包含模块的问题
- linux - 在shell中,如果大于100MB,如何删除文件,否则移动
- clojure - 如何理解这个猫的例子?
- php - 如何使用href将+1添加到var?
- c# - 如何在像firefox一样工作的窗口应用程序中使用浏览器?
- c++ - 如何正确打印列表的 const char* struct 成员?
- python - 情节线在子情节中错误地相互替换
- regex - 例如,有没有办法从 A1:A1000 的一系列单元格中进行 REGEXMATCH ?
- angular - RouterLink url 在打开新标签时更改为默认 url
- typescript - NativeScript 应用程序的“Error-ReferenceError-ErrorEvent 未定义”