使用开始日期和结束日期绘制订户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) 

Line plot of subscribers over time

这个怎么样?

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() 
+0

太棒了,非常感谢。我不确定它是如何工作的,但我想我现在明白了。它当然在一个非常大的数据集上执行。 – Murray