确定重叠范围 - R

2023-12-11

我有两个数据框。一份包含一个月内的购买情况,一份包含该月播放的广告(广告)。要了解购买是否可以可靠地链接到广告 - 我想了解有多少购买日期是在广告后 4 天内发生的。我创建了一些(繁琐的)代码来执行此操作 - 基于广告数据库的每一行的扩展以覆盖相关的 4 天时间段 - 然后使用合并构造来查看哪里(缺少)重叠。这感觉是一种非常麻烦的做事方式。理想情况下 - 我希望以优雅的方式在 dplyr 中完成此操作。如果有人有任何建议请告诉我

library(dplyr)
library(lubridate)
require(data.table)

# set start and end dates to sample between
day.start <- "2007/01/01"
day.end <- "2007/01/30"

set.seed(1) # define a random date/time selection function
rand.day.time <- function(day.start,day.end,size) {
  dayseq <- seq.Date(as.Date(day.start),as.Date(day.end),by="day")
  dayselect <- sample(dayseq,size,replace=TRUE)
  as.POSIXlt(paste(dayselect) )
}

dateval=rand.day.time(day.start,day.end,size=20)

###create initial dataframes
action=rep(c("ad","purchase"),10)
id=rep(c(1,1,2,2),5)
df=data.frame(customer=id,date=dateval,action=action)
df_pur=filter(df,action=="purchase");(df_pur=df_pur[order(df_pur$date),])
df_ad=filter(df,action=="ad");(df_ad=df_ad[order(df_ad$date),])

#expand data-frame to include all the ranges for which the ad might trigger purchases
df_ad_exp = df_ad %>%
  group_by(customer,date) %>%
  summarize(start=min(date),end=min(date+days(4))) 
df_ad_exp=as.data.frame(df_ad_exp)
df_ad_exp2=setDT(df_ad_exp)[, list(customer=customer, range=seq(start,end,by="day")), by=1:nrow(df_ad_exp)]

###merge the dataframe, use NA values to identify those dates in which purchase was made but no ad was "active"
df_ad_exp2=as.data.frame(df_ad_exp2)
(df_ad_exp2=df_ad_exp2[,c("customer","range")])
df_ad_exp2$helpercol=0
(df_pur_m=merge(df_pur,df_ad_exp2,by.x=c("date","customer"),by.y=c("range","customer"),all.x=TRUE))

df_pur_m$ad_in_range=df_pur_m$helpercol;df_pur_m$helpercol=NULL
df_pur_m$ad_in_range[!is.na(df_pur_m$ad_in_range)]=1;df_pur_m$ad_in_range[is.na(df_pur_m$ad_in_range)]=0

#outcomes
df_pur
df_ad
df_pur_m

> df_ad
   customer       date action
3         1 2007-01-07     ad
6         2 2007-01-07     ad
1         1 2007-01-08     ad
10        2 2007-01-12     ad
2         2 2007-01-18     ad
5         1 2007-01-19     ad
7         1 2007-01-21     ad
9         1 2007-01-22     ad
8         2 2007-01-24     ad
4         2 2007-01-29     ad
> df_pur_m
         date customer   action ad_in_range
1  2007-01-02        1 purchase           0
2  2007-01-06        2 purchase           0
3  2007-01-12        1 purchase           1
4  2007-01-12        1 purchase           1
5  2007-01-15        2 purchase           1
6  2007-01-20        2 purchase           1
7  2007-01-24        2 purchase           1
8  2007-01-27        1 purchase           0
9  2007-01-28        2 purchase           1
10 2007-01-30        1 purchase           0

Try foverlaps in data.table, it's designed为此(我想不出一个优雅的dplyr方式,抱歉)。您需要在两个表中都有开始/结束日期列,因此广告的开始/结束日期是开始日期到 4 天后;购买的开始/结束日期相同。

# df_ad must be keyed
setDT(df_ad)[, ad_date_end:=date + days(4)]
setnames(df_ad, 'date', 'ad_date') # just for readability later
setkey(df_ad, customer, ad_date, ad_date_end)

setDT(df_pur)[, purch_end:=date]
setnames(df_pur, 'date', 'purch_date') # for readability

# type='within': the x interval (purchase) is within the y interval (ad)
# we merge on customer ID, start & end date
ovl <- foverlaps(df_pur, df_ad,
                 by.x=c('customer', 'purch_date', 'purch_end'), type='within') 

#     customer    ad_date action ad_date_end purch_date i.action  purch_end
#  1:        1       <NA>     NA        <NA> 2007-01-02 purchase 2007-01-02
#  2:        2       <NA>     NA        <NA> 2007-01-06 purchase 2007-01-06
#  3:        1 2007-01-08     ad  2007-01-12 2007-01-12 purchase 2007-01-12
#  4:        1 2007-01-08     ad  2007-01-12 2007-01-12 purchase 2007-01-12
#  5:        2 2007-01-12     ad  2007-01-16 2007-01-15 purchase 2007-01-15
#  6:        2 2007-01-18     ad  2007-01-22 2007-01-20 purchase 2007-01-20
#  7:        2 2007-01-24     ad  2007-01-28 2007-01-24 purchase 2007-01-24
#  8:        1       <NA>     NA        <NA> 2007-01-27 purchase 2007-01-27
#  9:        2 2007-01-24     ad  2007-01-28 2007-01-28 purchase 2007-01-28
# 10:        1       <NA>     NA        <NA> 2007-01-30 purchase 2007-01-30
# tidyup
ovl[, action:=i.action][, c('ad_date_end', 'purch_end', 'i.action'):=NULL]
    customer    ad_date   action purch_date
#  1:        1       <NA> purchase 2007-01-02
#  2:        2       <NA> purchase 2007-01-06
#  3:        1 2007-01-08 purchase 2007-01-12
#  4:        1 2007-01-08 purchase 2007-01-12
#  5:        2 2007-01-12 purchase 2007-01-15
#  6:        2 2007-01-18 purchase 2007-01-20
#  7:        2 2007-01-24 purchase 2007-01-24
#  8:        1       <NA> purchase 2007-01-27
#  9:        2 2007-01-24 purchase 2007-01-28
# 10:        1       <NA> purchase 2007-01-30

行与NA ad_date购买与广告无关。

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

确定重叠范围 - R 的相关文章

  • 更新 R6 对象实例中的方法定义

    如何更新 R6 类实例的方法定义 正如我所期望的 S3 使用当前的方法定义 对于 R5 参考类 我可以使用 myInstance myInstance copy 在 R6 中 我尝试了 myInstance myInstance clone
  • sapply - 保留列名称

    我试图总结数据集中许多不同列 变量 的平均值 标准差等 我已经编写了自己的汇总函数 以准确返回我需要和正在使用的内容sapply立即将此函数应用于所有变量 它工作正常 但是返回的数据帧没有列名 我似乎甚至无法使用列号引用重命名它们 也就是说
  • 从 data.frame 在 ggplot 图例中添加信息

    我想在图例中添加信息 哪个传感器具有该值 这是我的代码 z lt data frame a c sensor 1 sensor 2 sensor 3 sensor 4 sensor 5 sensor 6 sensor 7 sensor 8
  • 在 R 中提取 data.frames 列表的名称以及 data.frame 中的值

    在下面的代码中 j是 data frames 的命名列表 我想知道是否有办法 a 提取变量的数值 即one short and one long 在 data frames 内并附加它们的相关名称 即 AAA or BBB or CCC 到
  • data.table 抛出“找不到对象”错误[重复]

    这个问题在这里已经有答案了 我有一个数据表 library data table mydt lt data table index 1 10 当我在全局环境中尝试它时 我可以让它工作 但当我在调试器中或在包测试中使用它时却无法工作 问题是我
  • R:按组,测试一个变量的每个值是否存在于另一个变量中

    我有一个数据框架 结构如下 a lt c 1 1 1 2 2 2 3 3 3 3 4 4 b lt c 1 2 3 1 2 3 1 2 3 4 1 2 c lt c NA NA 2 NA 1 1 NA NA 1 1 NA NA df lt
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • 要在子集中显示的非数字条目的维恩图

    我有以下数据框 SET1 SET2 SET3 par1 par2 par1 par2 par3 par2 par3 par4 par5 我想制作一个维恩图 其中所有这些 parX 元素都显示在各自的子集中 即作为标签 而不仅仅是重叠元素的数
  • R 中 SVG 图形的最佳设备? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想从 R 导出 SVG 图形 似乎有两种选择 RSvgDevice 和 Cairo 有人可以对这些包发表评论吗 是默认的还是明显比另一个
  • 如何将旋转的 NetCDF 转换回正常的纬度/经度网格?

    我有一个带有旋转坐标的 NetCDF 文件 我需要将其转换为正常的纬度 经度坐标 经度为 180到180 纬度为 90到90 library ncdf4 nc open dat nf 对于尺寸 它显示 1 5 variables exclu
  • R:单纯形错误:在下标赋值中不允许使用 NA

    对于以下具有目标函数和约束的最小化 boot simplex返回错误 Error in tab pr lt tab pr tab pr pc pv o tab pr NAs are not allowed in subscripted as
  • 计算 R 行中的非零条目数

    我有以下类型的数据 mode1 mode2 mode3 1 8 1 0 2 0 0 0 3 6 5 4 4 1 2 3 5 1 1 1 数据使用dput structure list mode1 c 8L 0L 6L 1L 1L mode2
  • 如何像在facet_grid中一样在facet_wrap中定位条带标签

    我想在使用时删除多余的条带标签facet wrap 并用两个变量进行分面 并且都是自由尺度的 例如 这个facet wrap下图的版本 library ggplot2 dt lt txhousing txhousing year in 20
  • HTTR GET 新错误:SSL 证书问题:证书已过期

    我已经运行这段代码几个月了 没有出现任何问题 今天我突然开始在我的两台 AWS 服务器上收到以下错误消息 错误 curl curl fetch memory url handle handle SSL证书问题 证书已过期 当尝试运行以下代码
  • 在 Google Colab 上的 R 笔记本中安装 python 库

    我正在尝试在 Google Colab 上的 R 笔记本中安装 python 库 为此我使用 reticulate 包 library reticulate py install pandas 但我得到的结果是这个错误 Error coul
  • 自定义轴缩放后 ggplot2 缺少标签

    我正在尝试使用我的 x 轴应用自定义缩放ggplot2 and scales trans new 但是 当我这样做时 一些轴标签丢失了 有人可以帮我弄清楚为什么吗 Setup library tidyverse the data ds lt
  • 无法编译包“maps”

    当我安装 maps 包时 安装中出现警告 ld warning ignoring file Library Developer CommandLineTools SDKs MacOSX10 14 sdk usr lib libSystem
  • 我如何查看 quantmod 包中所有可用的数据系列?

    如何显示可用的所有报价 数据系列的列表 例如使用雅虎的 getSymbols 我不知道有什么办法 TTR包有一个功能 stockSymbols 下载 NYSE AMEX 和 NASDAQ 的所有当前代码 它试图将它们采用雅虎可接受的格式 但
  • 在闪亮的数据表中为每个单元格显示工具提示或弹出窗口?

    有没有什么方法可以为 r闪亮数据表中的每个单元格获取工具提示 有很多方法可以获取悬停行或列 但我找不到一种方法来获取行和列索引并为每个单元格显示不同的悬停工具提示 任何人都可以修改以下代码吗 library shiny library DT
  • 如何在R中分离两个图?

    每当我运行这段代码时 第一个图就会简单地覆盖前一个图 R中有没有办法分开得到两个图 plot pc title main abc xlab xx ylab yy plot pcs title main sdf xlab sdf ylab x

随机推荐

  • Hibernate:如果没有活动事务,createQuery 无效

    我的 Spring Hibernate 项目有一些问题 当我尝试获取数据时 我有 HTTP Status 500 请求处理失败 嵌套异常是 org hibernate HibernateException createQuery 在没有活动
  • EmbedScriptFromFile 和 RunScriptFromFile - QTP/UFT

    请帮助我使用EmbedScriptFromFile RunScriptFromFile用于在QTP UFT中执行JS文件 我正在尝试使用 JS 文件获取 N 个值 并在数组中的 QTP UFT 中接收相同的值 为此 我必须了解EmbedSc
  • 解析数学表达式

    给定一个包含数学表达式的字符串 一组函数 命令以及一组分配的变量 NET 是否提供了快速构建解析器的工具 我想构建一个简单的解析器来分析表达式并将其分解为最简单的组件 例如 d abs a b sqrt c becomes f abs a
  • Infinispan JPA 二级缓存默认值

    我正在尝试将 Infinispan 配置为休眠二级缓存 一切都很好 但我想调整默认配置 即所有缓存共享的值 会自动为带有注释的实体创建缓存 Cache 我可以在其中一一定制infinispan xml by
  • 如果我在 ReactJS 或 React Native 类的构造函数中使用 setState() 函数,会发生什么?

    出于好奇 我只是想知道如果我使用会发生什么setState React Native 或 ReactJS 中类的构造函数中的函数 例如 constructor props super props this setState title ne
  • 使用向量中的元素的 R grep 正则表达式(FOLLOW UP)

    跟进这个问题 我还有另一个例子 我无法使用已接受的答案 再说一次 我想找到每一个确切的group中的元素lab向量 labs lt c Beijing T0 BC 89 CN Beijing T24 BC 89 CN Beijing T0
  • 将 jQuery 自动完成应用于克隆元素

    我在用jQuery 自动完成它适用于现有元素 但不适用于动态添加的元素 这是我的自动完成代码 我做了一些更改 function function widget ui combobox create function var self thi
  • 为什么我不能直接引用 document.createElement?

    当创建大量 DOM 元素时 document createElement 和类似的方法可能会添加大量字节并且变得丑陋 我知道我可以制作自己的子例程 或者使用innerHTML 或其他什么 但为什么我不能这样做 var c document
  • Windows 关闭时的 Java 关闭钩子调用

    我遇到一种情况 当用户向操作系统 在我的情况下只有 Windows 发出关闭信号时 我想执行某些任务 我尝试过使用java shutdown hooks 我面临的问题是 当我使用退出程序时System exit 0 关闭挂钩被调用 但当我直
  • 如何从R中的文件读取逻辑数据

    我生成了一个文件 其中每行都包含一个 TRUE 或 FALSE 逻辑值 现在我想将文件中的逻辑数据读入R 但是读入的数据是 字符 模式而不是逻辑值 我想知道如何从文件中读取数据作为逻辑值 我的 R 代码是 cat FALSE n file
  • C++ 顺时针排序 2D 点

    i wrote a program to arrange points on a graph in clockwise manner from 12 o clock such that a vector containing these p
  • 创建一个 titleize 方法,排除“小词”。

    我正在制作一种方法来大写我的输入 除了 a an 和 等任何单词 def titleize string to titleize string to titleize split map words words capitalize joi
  • 为什么允许这些默认参数?

    我发现了this问题 我完全困惑了 答案说b无效 非静态成员不能用作默认参数 这是完全有道理的 我不明白的是为什么另外两个没问题 事实上 如果默认值不是常量表达式 我正在努力理解语义是什么 这里发生了什么 默认参数在编译时明确评估 编译器只
  • 函数体存放在系统目录的什么位置?

    我正在尝试为我的数据库构建一个文档系统 我想包含我的函数和触发器的来源 我设法找到了函数和触发器的所有元数据 但是这些函数和触发器的实际主体存储在哪里 使用功能pg get functiondef 获取完整的函数定义 SELECT pg g
  • 在android上的opengles 2.0中绘制精灵的最快方法

    所以我试图弄清楚如何多次绘制单个纹理四边形 我的问题是 由于它们被创建和删除 并且它们中的每一个都有独特的位置和旋转 我不确定 vbo 是最好的解决方案 因为我听说在 android 上修改缓冲区非常慢 而且似乎我需要每帧创建一个新的缓冲区
  • Unity GVR Cardboard 相机在 Android 上无法正常工作

    我已经准备好了与 Google VR Cardboard 一起使用的统一环境 示例项目运行良好 一切都很好 在我的项目中 我有主相机对象 它在场景中移动 我已将 Strereo Controller 脚本 组件添加到相机中 并且它在 Uni
  • 获取:“找不到 SessionsHelper,期望它在 helpers/sessions_helper.rb 中定义”

    加载 login 后 我在日志文件中收到以下内容 Started GET login for 120 138 93 108 at 2016 01 02 03 06 24 0000 ActionController RoutingError
  • 上传者收到“策略过期”消息发送到 S3 的某些情况

    我最近实施了 Fine Uploader 它基本上是成功的 然而 少数用户无法上传 他们都使用现代浏览器 IE10 FF 和 Chrome 其中一个让我远程访问他们的机器 我可以在 Chrome 和 FF 上尝试它 我在两者上都遇到了相同的
  • Java Swing:如何获取包括刚刚键入的字符在内的 TextArea 值?

    键入按键后获取 TextArea 值 包括该字符 的最佳方法是什么 如果我在事件侦听器中执行此操作 textarea getText 返回不带最终新字符的值 基本上我看到两种方法 使用 invokeLater 之类的方法推迟处理 我更喜欢没
  • 确定重叠范围 - R

    我有两个数据框 一份包含一个月内的购买情况 一份包含该月播放的广告 广告 要了解购买是否可以可靠地链接到广告 我想了解有多少购买日期是在广告后 4 天内发生的 我创建了一些 繁琐的 代码来执行此操作 基于广告数据库的每一行的扩展以覆盖相关的