【发布时间】:2020-02-07 03:52:25
【问题描述】:
我有一个类似这个虚拟样本的日期集。它包含两个月的数字用户活动数据。
df <- tibble::tribble(
~date, ~user_id, ~app_id, ~total_usage,
20190701, "18120439-aa", 383, 223,
20190702, "18120439-aa", 383, 147,
20190701, "18120439-ab", 382, 10,
20190701, "18120439-ab", 383, 395,
20190702, "18120439-ab", 383, 495,
20190703, "18120439-ab", 383, 347,
20190807, "18160102-aa", 262, 6,
20190808, "18160102-aa", 262, 24,
20190711, "18160102-aa", 382, 3,
20190725, "18160102-aa", 382, 11,
20190727, "18160102-aa", 382, 48,
20190702, "18160102-aa", 383, 6,
20190705, "18160102-aa", 383, 42,
20190706, "18160102-aa", 383, 104,
20190708, "18160102-aa", 383, 12,
20190709, "18160102-aa", 383, 13,
20190710, "18160102-aa", 383, 114,
20190712, "18160102-aa", 383, 187,
20190713, "18160102-aa", 383, 37,
20190715, "18160102-aa", 383, 58,
20190716, "18160102-aa", 383, 40,
20190717, "18160102-aa", 383, 40,
20190718, "18160102-aa", 383, 35,
20190719, "18160102-aa", 383, 19,
20190720, "18160102-aa", 383, 63,
20190723, "18160102-aa", 383, 2,
20190726, "18160102-aa", 383, 69,
20190729, "18160102-aa", 383, 31,
20190730, "18160102-aa", 383, 26,
20190731, "18160102-aa", 383, 41,
20190802, "18160102-aa", 383, 50,
20190805, "18160102-aa", 383, 34,
20190806, "18160102-aa", 383, 23,
20190807, "18160102-aa", 383, 14
)
第一个任务
我用key=c(user_id, app_id) 和date 作为索引创建了一个tsibble 对象。首先,我尝试获取整个期间每个用户每个 app_id 的平均使用量。用户可以在线任意天数、1 天、10 天、30 天或每天 == 60 天。我想根据用户活动天数计算rollapply平均值。
示例:用户 18160102-aa 仅活跃了两天并使用了 app_id 262,第一天使用了 6 分钟,第二天使用了 24 分钟,因此该用户在 app_id = 262 的整个期间内的平均使用时间为 15 分钟。
我使用 tsibble::tile_dbl 计算窗口大小的平均值 60(2 个月 = 60 天) 在整个期间,然后将其转换回 tibble 并删除重复的行。像这样:
library(tidyverse)
library(tsibble)
df %>%
#create a tsibble object
as_tsibble(key = c(user_id, app_id), index = date) %>%
group_by_key() %>%
# calculate average during the activity period
mutate(Avg_period = tile_dbl(total_usage, ~ mean(., na.rm = TRUE), .size = 60)) %>%
as_tibble() %>%
select(-total_usage, -date) %>%
distinct()
输出似乎是正确的,但是我想知道是否有更好的方法来做到这一点而无需重复?
第二个任务
如果我想从特定日期计算过去 7 天、14 天和 21 天的平均使用量和累计使用量,如何设置窗口大小?
【问题讨论】:
标签: r time-series tidyverse rolling-computation tsibble