根据重叠日期计算活跃天/月

2023-12-10

我有数据列出大量客户的不同产品的开始和结束日期。不同产品的购买间隔可以重叠或有时间间隔:

library(lubridate)
library(Hmisc)
library(dplyr)

user_id <- c(rep(12, 8), rep(33, 5))

start_date <- dmy(Cs(31/10/2010,    18/12/2010, 31/10/2011, 18/12/2011, 27/03/2014, 18/12/2014, 27/03/2015, 18/12/2016, 01/07/1992, 20/08/1993, 28/10/1999, 31/01/2006, 26/08/2016))

end_date <- dmy(Cs(31/10/2011,  18/12/2011, 28/04/2014, 18/12/2014, 27/03/2015, 18/12/2016, 27/03/2016, 18/12/2017,
               01/07/2016,  16/08/2016, 15/11/2012, 28/02/2006, 26/01/2017))

data <- data.frame(user_id, start_date, end_date)

data
   user_id start_date   end_date
1       12 2010-10-31 2011-10-31
2       12 2010-12-18 2011-12-18
3       12 2011-10-31 2014-04-28
4       12 2011-12-18 2014-12-18
5       12 2014-03-27 2015-03-27
6       12 2014-12-18 2016-12-18
7       12 2015-03-27 2016-03-27
8       12 2016-12-18 2017-12-18
9       33 1992-07-01 2016-07-01
10      33 1993-08-20 2016-08-16
11      33 1999-10-28 2012-11-15
12      33 2006-01-31 2006-02-28
13      33 2016-08-26 2017-01-26

我想计算他/她持有任何产品的活跃天数或月份总数.

如果产品总是重叠,那不会有问题,因为那样我就可以简单地采取

data %>% 
group_by(user_id) %>% 
dplyr::summarize(time_diff = max(end_date) - min(start_date))

然而,正如您在用户 33 中看到的,产品并不总是重叠,它们的间隔必须单独添加到所有“重叠”间隔中。

有没有一种快速而优雅的方法来编码它,希望在dplyr?


使用有什么用IRanges and intersect?

library(IRanges)
data %>% 
  group_by(user_id) %>% 
  summarise(days_held=sum(width(reduce(IRanges(as.numeric(start_date), as.numeric(end_date)))))) 
# A tibble: 2 × 2
  user_id active_days
    <dbl>       <int>
1      12        2606
2      33        8967

这里是使用 Nathan Wert 的基准big_data。 ORange 方法似乎更快一些。

my_result <- function(x) {
x %>% 
    group_by(user_id) %>% 
    summarise(days_held=sum(width(reduce(IRanges(as.numeric(start_date), as.numeric(end_date)))))) 
}


library(microbenchmark)
microbenchmark(
  a <- my_result(big_data),
  b <- my_answer(big_data), times=2
)
Unit: seconds
                     expr      min       lq     mean   median       uq      max neval cld
 a <- my_result(big_data) 14.97008 14.97008 14.98896 14.98896 15.00783 15.00783     2  a 
 b <- my_answer(big_data) 17.59373 17.59373 17.76257 17.76257 17.93140 17.93140     2   b

all.equal(a, b)
[1] TRUE

Edit

为了可视化范围,您还可以绘制数据......

library(Gviz)
library(GenomicRanges)
a <- sapply(split(data, data$user_id), function(x) {
  AnnotationTrack(start = as.numeric(x$start_date), end = as.numeric(x$end_date),
                  chromosome = "chrNA", stacking = "full", name = as.character(unique(x$user_id)))
})
plotTracks(trackList = a)

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据重叠日期计算活跃天/月 的相关文章

  • lme4:如何指定 2 个与随机截距的相关性,而不添加随机斜率之间的相关性

    重新发布自stats stackexchange com https stats stackexchange com q 195385 33560 我试图在 R 的 lme4 包中指定一个模型 其中随机截距和随机斜率之间有 2 个相关性 但
  • 将线条剪裁到绘图区域并在绘图区域外显示文本

    我想限制绘图的可见 y 范围 为了保留超出此范围的值 我需要设置oob 出界 to rescale none这效果很好 不过 我还想在图外的页边空白处添加一些文本 为了做到这一点 我需要关闭剪辑 这会导致超出范围的值被绘制在绘图区域之外的边
  • R:使用 dcast 时包含没有条目的因子

    我在数据帧上使用 reshape2 函数 dcast 其中一个变量是某些级别未出现在数据框中的因素 但我会将所有值包含在创建的新列中 例如 假设我运行以下命令 library reshape2 dataDF lt data frame id
  • 替换为 NA

    我有一个包含条目的数据框 看来这些值没有被视为 NA 因为 is na 返回 FALSE 我想将这些值转换为 NA 但找不到方法 Use dfr dfr
  • 为 PDF 输出添加 natbib 选项

    有没有办法指定natibib输出 PDF 时的选项bookdown 我希望 tex 输出具有命令 usepackage sort compress natbib 但似乎没有任何方法可以在 YAML 中指定它 我无法将命令添加到我的序言中 因
  • 是否可以使用像“tz=NULL”这样的东西?...“as.POSIXct”默认为依赖于语言环境的时区(与“as.Date”不同),这会导致问题

    我知道这是一个长期存在 根深蒂固的问题 但这是我经常遇到的问题 而且我看到初学者R经常与此斗争 我希望有一个令人满意的解决方案 到目前为止 我的谷歌和 SO 搜索都是空的 但如果在其他地方重复 请指出正确的方向 TL DR 有没有办法使用类
  • 添加不同的标签以在 ggplot R 中的堆积条形图中显示总计?

    我的问题有点类似 如何添加文本标签以显示ggplot中堆叠比例条的每个条中的总数n https stackoverflow com questions 65201095 how to add text label to show total
  • 如何使用 ggplot 绘制矩阵图

    我想可视化一个矩阵 MAT lt matrix c 100 7 0 0 49 0 0 0 49 nrow 3 ncol 3 gt MAT 1 2 3 1 100 7 0 2 0 49 0 3 0 0 49 然而 标准方法不能正确地对小数字进
  • Sweave 缓存包

    我正在尝试编写一份报告 我的问题是每次我编译 R 时都会加载我在报告中使用的包 如 ggplot2 MASS cubature 这是非常耗时的 有没有办法查包裹 I found 缓存编织但它不起作用 这是我在 sweave 文件中添加的块
  • 如何重试错误语句?

    如果某个语句出错 我如何简单地告诉 R 重试该语句几次 例如 我希望做类似的事情 tryCatch dbGetQuery Query database error function e if is locking error e If da
  • 将一个大的 xlsx 文件导入到 R 中?

    我想知道是否有人知道从 大 xlsx 文件 20Mb 导入数据的方法 我尝试使用 xlsx 和 XLConnect 库 不幸的是 两者都使用 rJava 我总是收到相同的错误 gt library XLConnect gt wb lt lo
  • 将英寸高度的字符向量转换为厘米?

    我得到一个字符向量 tibble H c 6 2 5 10 5 5 5 1 5 5 5 4 我想将其转换为厘米 请告知我该怎么做 有几种方法可以使用 1 阅读与fread粘贴到单个字符串后 library data table fread
  • 整理包中的字段说明

    我很抱歉 因为我知道这个答案可能出现在编写 R 包的手册中 但在我阅读和查看其他包的整理字段时 我无法 100 弄清楚该字段的用途 用简单的语言 我的是英语 来看 包的描述文件中的整理字段有什么作用 人们想在那里放什么 我认为这来自于某个时
  • 在R中提取其他两个字符串之间的字符串

    我试图找到一种简单的方法来提取出现在两个已知子字符串之间的未知子字符串 可以是任何内容 例如 我有一个字符串 a lt anything goes here STR1 GET ME STR2 anything goes here 我需要提取
  • 在 R 中使用 ggplot2 叠加两个图

    有两个数据框 df1 df2我需要使用 ggplot2 创建线图并显示在同一个图表上 df1 x y 2 30 4 25 6 20 8 15 df2 x y 2 12 4 16 6 20 8 24 用于绘制第一个 df p1 lt ggpl
  • R 中的频率加权,与 Stata 的结果比较

    我正在尝试分析明尼苏达大学 IPUMS 数据集中的数据1990 年美国人口普查 http usa ipums org usa sampdesc shtml us1990a in R 我正在使用survey http faculty wash
  • 如何将带有几行代码的字符数组转换为 data.frame?

    我有以下数组 my list lt c Jan 01 Dec 31 00 00 24 00 Jan 01 Jun 30 12 00 18 00 Jul 06 Dec 31 09 00 19 00 导致以下结果的最短代码是什么 x1 x2 x
  • 动态显示仪表板页面

    我有一个实用的闪亮应用程序 它使用shinydashboard包裹 新功能需要特定于用户的行为 例如 针对不同的用户名使用不同的数据集 因此我打算 显示登录表单 验证凭据并设置反应值LoggedIn to true如果成功的话 显示实际情况
  • PHP - 查找和比较日期

    你好 我有 foreach 我可以在其中获取数据库中的事件数据 我使用数据库中的日期名称 例如 event date 我需要在一个 div 中比较具有相同日期和输出的操作 例如我有这个事件 活动一 9 月 13 日 活动二 9 月 1 日
  • 修改x轴刻度标签

    我正在尝试更改由生成的箱线图的 x 轴刻度标签ggplot2 x 轴是一个分类变量 HabFac 我想要的是将其刻度更改为 6 个化学品 A E 下面是我的代码 raw data read table Read data p TT ggpl

随机推荐

  • html css 等于 div 高度

    我有一个容器 div 其中并排包含 2 个动态高度 高度尚未设置 div 这 2 个 div 是内容 div 有时一个 div 的内容比另一个 div 的内容多 导致与另一个 div 的距离更长 而那些两个 div 具有不同的颜色 为了具有
  • Python 中的 HTML 文件解析

    我有一个很长的 html 文件 看起来完全像这样 html文件 我希望能够解析该文件 以便获得 tuple 表单中的信息 Example tr td Cech td td Chelsea td td 30 td td 6 4 td tr 上
  • 计算字符串中子字符串出现的次数

    如何计算 Python 字符串中给定子字符串出现的次数 例如 gt gt gt foo bar foo numberOfOccurrences foo 2 To get indices of the substrings see How t
  • 如何在 R 中求 5 分钟间隔的总和

    我有一个数据集 其中包含 6 个不同站点每分钟的降水量记录 我想对每个电台每 5 分钟进行一次汇总 这些是我的数据集的前 5 行 总共 17280 行 P alex P hvh P merlijn P pascal P thurlede P
  • Python加载带有UTF-8 BOM头的json文件

    我需要解析其他工具生成的文件 该工具无条件输出带有 UTF 8 BOM 标头 EFBBBF 的 json 文件 我很快发现这就是问题所在 因为 Python 2 7 模块似乎无法解析它 gt gt gt import json gt gt
  • 绘制 Windrose:制作浓度设置为颜色的污染玫瑰

    尝试绘制风玫瑰图 其中绘制了速度和方向 浓度决定了颜色 不幸的是 matplotlib 仅支持两个变量 可以制作一个很好的散点图来显示我想要的内容 但不确定如何将其分类 以便它像所附图像一样 Halliday et al 2016 应转换为
  • 拦截窗口窃取 Windows 全局焦点的尝试

    我是一名开发人员和长期 Windows 用户 痴迷于让我的系统尽可能方便使用 昨天 我想到了 Windows 中一直让我烦恼并且我认为理所当然的事情 我意识到我对它如何工作有更好的想法 我现在想知道是否有可能调整 Windows 以使其工作
  • 让用户在 IOS swift 中的应用程序外部保存 pdf

    我制作了一个 PDF 并将其保存在我的应用程序中 但我想让用户将 PDF 文档保存在我的应用程序外部的目录中 抱歉英语不好 我来自瑞士 格式化程序中的标记文本 这很重要吗 我必须使用它来做什么 我认为 UIGraphicsBeginPDFC
  • 如何使用asio库获取IP地址的主机名?

    我正在尝试从 UDP 端点获取主机名 不过我不知道boost asio是否支持IP gt 主机名转换 有人可以回答我的问题吗 获取姓名信息就是你想要的 getnameinfo sockaddr addr sizeof addr hostna
  • 使用Django向前端传递JSON数据

    如果一般使用 Django 框架或 Python 有没有办法将 JSON 对象传递到 Web 模板的前端 例如 如果我想发送一个具有两个数组作为属性的对象 假设xvalues and yvalues 我如何能够使用 JavaScript 或
  • 用于生产的 Browserify/Babelify React(NODE_ENV 生产)

    我运行这个命令 browserify src js t babelify presets react gt build js 我得到了一个可以自己使用的文件 工作正常 但它的 NODE ENV 设置为开发 我得到一个关于下载 React D
  • 如何配置 Git 以信任来自 Windows 证书存储区的证书?

    目前我的目录中有以下条目 gitconfig在我的用户目录中 http sslCAInfo C Users julian lettner ssh git test pem 这设置了与 git 服务器交互时要使用的证书 我公司的 git 服务
  • Fluent NHibernate Child 集合持久化问题

    我有以下映射类 仅复制相关部分 public class CardTemplateMapping ClassMap
  • 在 Angular 中派生类型化 FormGroup 的值的类型

    使用 Angular 中新的类型化表单控件 我们可以做到这一点 interface MyFormGroup id FormControl
  • 添加 unicode 时出现编译时错误 \u0022

    我试图使用 unicode 在字符串中添加双引号 但是当我这样做时 我收到编译时间错误 String unicCode u0022 This line gives a compile time error 我得到的编译错误是 字符串文字未正
  • jface tableviewer 中的多行功能或换行文本功能

    我有一个 jface tableviewer 表 其中列中的数据仅出现在一行中 即使它是长文本 如果文本超过一定限制 我想要表格的换行文本功能或多行功能 有人可以帮我解决这个问题吗 请参阅此 SWT 片段在表项中绘制多行文本还有这个JFac
  • 如何从变量模板字符串中提取动态对象并再次将其合并?

    我有一根绳子 该字符串是在运行时从文件中提取的 可以是任何格式 其格式如下例所示 唯一的规则是括号内的单词必须转换为属性dynamic对象及其向用户询问的值 可能通过使用 winformsPropertyGrid or an ObjectL
  • C++单元测试框架[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我对 C 代码使用 Boost Test 框架 但它有两个问题 这可能是所有 C 测试框架所共有的 无法创建自动测试存根 例如 通过从选定的类中提取公共函数 您不能运行单个测试 您必
  • 如何在 SwiftUI 中创建 struct LazyList?

    我使用 ScrollView LazyVStack ForEach 而不是标准列表 如何围绕这个制作包装 struct ContentView View State private var items 1 2 3 var body some
  • 根据重叠日期计算活跃天/月

    我有数据列出大量客户的不同产品的开始和结束日期 不同产品的购买间隔可以重叠或有时间间隔 library lubridate library Hmisc library dplyr user id lt c rep 12 8 rep 33 5