使用开始日期和结束日期绘制订户R
问题描述:
我希望使用开始日期和结束日期绘制订阅者随时间的频率。使用开始日期和结束日期绘制订户R
我有一种方法可以为每个用户每天创建一行,然后计算每天的频率,然后每天绘制频率。
这对小数据适用,但不会扩展到大用户数,因为每个客户步的行数太大。
有没有一种有效的方法?非常感谢您的帮助。
library(ggplot2)
library(dplyr)
# create dummy dataset
subscribers <- data.frame(id = seq(1:10),
start = sample(seq(as.Date('2016/01/01'), as.Date('2016/06/01'), by="day"), 10),
end = sample(seq(as.Date('2017/01/01'), as.Date('2017/06/01'), by="day"), 10))
# creates a row for each day per user - OK for small datasets, but not scalable
date_map <- Map(seq, subscribers$start, subscribers$end, by = "day")
date_rows <- data.frame(
org = rep.int(subscribers$id, vapply(date_map, length, 1L)),
date = do.call(c, date_map))
# finds the frequency of users for each day
date_rows %>%
group_by(date) %>%
dplyr::summarise(users = n()) -> plot_data
ggplot(data = plot_data,
aes(x = date, y = users)) +
geom_line(size = 1.2,alpha = .6)
答
这个怎么样?
library(tidyverse)
df <- subscribers %>%
gather(key, value, start, end) %>%
mutate(key = ifelse(key == "start",1,-1)) %>%
arrange(value)
df$cum <- cumsum(df$key)
ggplot(data = df,
aes(x = value, y = cum)) +
geom_step()
太棒了,非常感谢。我不确定它是如何工作的,但我想我现在明白了。它当然在一个非常大的数据集上执行。 – Murray