r - 从单列数据中获取开始日期和结束日期
问题描述
我正在尝试从作为销售虚拟变量的数据列中查找产品销售期的开始和结束日期。这是我正在使用的数据类型的代理:
我正在寻找的结果是:
我正在处理的实际数据集比这大得多,不一定只看 2010-01 到 2011-12。
谢谢!
解决方案
这假设每个产品只有一次销售
require(tidyverse)
df <- data.frame(product = 'Product A',
month = seq(as.Date('2010-01-01'),
as.Date('2010-10-01'),
by = 'month'
),
onSale = c(rep(0,3), rep(1,4),rep(0,3))
)
df %>%
group_by(product) %>%
summarise(saleStart = month[which.min(month[onSale == 1])],
salend = month[which.max(month[onSale == 1])]
)
编辑:
df <- data.frame(product = 'Product A',
month = seq(as.Date('2010-01-01'),
as.Date('2011-09-01'),
by = 'month'
),
onSale = c(rep(0,3), rep(1,4),rep(0,3), rep(1,4),rep(0,3), rep(1,4))
)
df %>%
group_by(product) %>%
mutate(diff = c(0,diff(onSale))) %>%
group_by(product, diff) %>%
filter(diff == 1) %>%
mutate(monthStart = month, monthEnd = month %m+% months(1)) %>%
select(-month,-diff)
推荐阅读
- nasm - 将 NASM 汇编源代码拆分为库
- selenium - 在远程控制(Selenium)中如何使用或启用 Tor 电路?
- javascript - 如何绑定 btn REACT 的值?
- blogger - 更改博主主页中帖子正文的文本大小(即片段的)
- javascript - CSS) 不能使高度从 0 过渡到 100%
- github-actions - 在 Docker 容器中的 GitHub 操作中运行多种语言版本的测试
- c# - DataTemplate 中嵌套元素样式的动态变化
- javascript - 如何在javascript中实现多个项目计数器?
- java - 每秒在谷歌地图中添加新标记
- iphone - Wordpress 选择文件按钮在 iPhone 上不起作用