我有一份公司列表,上面有活动的开始日期和结束日期。我想绘制一个图形,在x轴上显示日期,在y轴上显示当前正在进行活动的公司的数量。目前我能想到的唯一方法是为每一天生成一个列,并给它一个1/0,表示该天是否在每个公司的开始日期和结束日期之间,然后对其进行重塑。有没有更有效的方法来生产这个?
以下是一些示例数据:
set.seed(123)
df <- data.frame(id = sample(100:500, 100, replace = F))
df$start <- sample(seq(as.Date('2020/01/01'), as.Date('2020/12/31'), by="day"), 100)
df$end <- df$start + sample(1:50, replace = T)
发布于 2021-08-25 08:58:51
这是另一个选择,尽管我怀疑它是否比你已经做的更有效率。它还制作了所有的日期,然后确定当天是否有任何特定的观察是“活动的”。
outdf <- tibble(
date = seq(min(df$start), max(df$end), by=1),
num = rowSums(outer(date,
1:nrow(df),
function(x,y)x > df$start[y] & x < df$end[y]))
)
outdf
# # A tibble: 404 x 2
# date num
# <date> <dbl>
# 1 2020-01-05 0
# 2 2020-01-06 1
# 3 2020-01-07 1
# 4 2020-01-08 1
# 5 2020-01-09 1
# 6 2020-01-10 1
# 7 2020-01-11 2
# 8 2020-01-12 2
# 9 2020-01-13 2
# 10 2020-01-14 2
# # … with 394 more rows
https://stackoverflow.com/questions/68926701
复制