结合基于多个条件的观察结果

2024-01-10

目前我正在撰写硕士论文,但是,在多个条件下组合行时遇到一些问题。我在下面说明了我的问题和期望的结果。我希望你可以帮助我 :)。

这是我的数据集的示例:

df <- data.frame(
  userID = c(1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3),
  sessionID = c(1, 2, 3, 4, 5, 1, 2, 1, 2, 3, 4),
  date = as.Date(c("2019-03-15", "2019-03-18", "2019-03-19", "2019-03-21","2019-03-30", "2019-04-05", 
                   "2019-06-06", "2019-11-22", "2019-12-22", "2019-12-24", "2020-01-15"), 
                 format = "%Y-%m-%d"),
  purchase=c(0,1,0,0,0,0,0,0,0,1,0))

现在,我通过 diff 通过 dplyr 计算了差异:

library(dplyr)
df <- df %>%
  group_by(userID) %>%
  mutate(diff = date - lag(date))

但是,如果行之间的差异

我已经在 dplyr 中使用过滤器和汇总功能尝试了很多方法,但它没有给出所需的结果。另外,我真的不知道如何包含购买条件。

我想要的结果是这样的:

df2 <- data.frame(
  userID = c(1, 1, 2, 2, 3, 3, 3),
  sessionID = c("1 + 2", "3 + 4 + 5", "1", "2", "1", "2 + 3", "4"),
  date.start = as.Date(c("2019-03-15","2019-03-19", "2019-04-05", 
                   "2019-06-06", "2019-11-22", "2019-12-22", "2020-01-15"), 
                 format = "%Y-%m-%d"),
  date.end = as.Date(c("2019-03-18", "2019-03-30", "2019-04-05", "2019-06-06", 
                     "2019-11-22", "2019-12-24", "2020-01-15"), format = "%Y-%m-%d"),  
  purchase=c(1,0,0,0,0,1,0))

我希望你可以帮助我 :) 提前致谢!


按'userID'分组,根据'purchase'中出现1的情况创建一个新组,方法是对lag'购买',然后根据diff相邻“日期”值之间的差异,即检查差异是否大于或等于 10 天,进行累积和,并且summarise通过粘贴(str_c https://www.rdocumentation.org/packages/stringr/versions/1.4.0/topics/str_c),得到first'日期' 元素和last“日期”和any“购买”中的值为 1 作为摘要列

library(dplyr)
library(stringr)
df %>% 
    group_by(userID) %>%
    group_by( grp = cumsum(lag(purchase, 
        default = first(purchase))), .add = TRUE) %>%
    group_by(cat = cumsum(difftime(date, 
      lag(date, default = first(date)), units = 'day') >= 10), .add = TRUE ) %>%
    summarise(sessionID = str_c(sessionID, collapse= ' + '), 
              date.start = first(date), date.end = last(date), 
               purchase = +(any(purchase == 1)), .groups = 'drop' ) %>%
    select(-grp, -cat)

-output

# A tibble: 7 x 5
  userID sessionID date.start date.end   purchase
   <dbl> <chr>     <date>     <date>        <int>
1      1 1 + 2     2019-03-15 2019-03-18        1
2      1 3 + 4 + 5 2019-03-19 2019-03-30        0
3      2 1         2019-04-05 2019-04-05        0
4      2 2         2019-06-06 2019-06-06        0
5      3 1         2019-11-22 2019-11-22        0
6      3 2 + 3     2019-12-22 2019-12-24        1
7      3 4         2020-01-15 2020-01-15        0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

结合基于多个条件的观察结果 的相关文章

  • 如何获得属于五分位数的x?

    我正在大学学习使用 R 进行计量经济学项目 所以请原谅我的笨拙 基本上 使用并给出 一个矩阵 股票价格 行 天 列 公司股票价格 另一个矩阵 市值 行 天 列 公司市值 我必须收集第三个矩阵每天观察的属于市值分布第一五分位数的股票价格 然后
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac
  • 从 R 中的 HTTPS 连接逐行读取

    当创建连接时open r 它允许逐行读取 这对于批量处理大数据流非常有用 例如这个脚本 https gist github com jeroenooms d33a24958d99bb969ac0通过一次读取 100 行来解析相当大的 gzi
  • 根据另一列中的键累积一列中的值时出现问题

    我有一个看起来像这样的数据框 我需要使用 PROJ ID 列中的字符串创建一个新的值列 并形成 PROJ NAME 列中的值字符串 这里提供的解决方案 根据 r 中另一列的键累积一列中的值 https stackoverflow com q
  • 将函数应用于 3d 数组的每一层,返回一个数组

    假设您有一个包含行 列和层的 3 维数组 A lt array 1 27 c 3 3 3 想象你有一个函数 它接受一个矩阵作为输入并返回一个矩阵作为输出 就像t 如何将该函数应用于数组的每一层 返回与第一层大小相同的另一个数组 我觉得我应该
  • 将数据从 R 导出到 Excel

    我试图将从 R 获得的一些结果导出到 Excel 中 但未成功 我尝试过以下代码 write table ALBERTA1 D ALBERTA1 txt sep t write csv ALBERTA1 ALBERTA1 csv your
  • 解析,用三点参数替换

    让我们考虑一个典型的deparse substitute R call f1 lt function u x y print deparse substitute x varU vu varX vx varY vy f1 u varU x
  • 为绘图制作 2D 图例 - 双变量分区统计图

    我一直在玩双变量 choropleth 地图 并且一直在如何创建类似于 2d 图例的问题上陷入困境约书亚 史蒂文斯 http www joshuastevens net cartography make a bivariate chorop
  • R:表格格式

    我有一个包含以下列的 Excel 文件 Column1 Column2 Column3 ab bb 0 5 ab bc 0 1 ab cd 0 7 ab dd 0 8 ac bb 0 2 ac bg 0 8 ac ee 0 8 ac dd
  • R:将 JSON 时间格式转换为 POSIX

    我有一个 JSON 字符串 并将其放入数据框中 我能够做到这一点 但我在使用 apply 函数之一将所有时间字符串转换为 POSIX 格式时遇到问题 See here https stackoverflow com questions 90
  • 如何在R中同时对三个字段进行网络分析

    如何在 R 中同时对三个字段进行网络分析 下面是示例数据以及desired output在最后一栏中 df lt data frame stringsAsFactors FALSE id 1 c ABC ABC BCD CDE DEF EF
  • 16 位以上整数的计算

    我有两个大整数 两者都超过 16 位 确切地说是 20 位 而且我知道由于双精度浮点运算 我在使用这些数字进行计算甚至将它们存储在变量中 独立于编程语言 时受到限制 不过 我想也许gmp图书馆应该处理它们 但不幸的是它没有 可以计算更大的整
  • 如何根据两个数据框中最近的日期进行匹配?

    假设我有两个数据框 例如 set seed 123 df1 lt data frame bmi rnorm 20 25 5 date1 sample seq Date as Date 2014 01 01 as Date 2014 02 2
  • 在多行中打印带有列名称的 R 数据框

    我有一个带有长列名称的 R 数据框 所以当我打印数据框时它太宽了 有没有一种简单的方法可以将数据框打印到屏幕上 并且列名出现在多行中 我知道我可以缩短名字 但我不想这样做 当奥斯卡的答案被接受时 我想这可能真的是一个答案 不幸的是 这只是复
  • 提取部分字符串值,创建新的列名称,并使数据框宽

    我想提取字符串列的最后一部分 始终用方括号括起来 将它们作为新列的名称 然后将数据从长调整为宽 并用这些值填充新列 例如 如果我有这个数据框 whatihave lt data frame v1 c abc effort def effor
  • ggplot 直方图相对于轴的位置不正确

    我试图这样绘制直方图 Todo lo haremos con base en un variable aleatoria Uniforme 0 1 set seed 26 n 10000 U lt runif n n Supongamos
  • 如何动态访问数据帧列表中的特定属性

    我有一个数据 它是数据框的列表 我正在尝试访问列表中每个数据帧内的特定属性 可以提取特定属性DP UniqueId使用下面的代码 gt attr new data A AA SpotfireColumnMetaData DP UniqueI
  • R中将矩阵拆分为子矩阵的函数

    我有一个 16 行 12 列的矩阵 M 我想将其拆分为 16 个矩阵的数组 每个矩阵有 4 行 3 列 我可以通过以下方式手动完成 M matrix sample 0 127 16 12 replace TRUE c 16 12 ma1 M
  • 根据R中的前一行和当前行按组计算

    我可以根据 R 中的前一行和当前行进行计算 对于此数据框 df A B 1 2 2 2 2 3 3 4 5 5 B2 A2 0 5 B1 我可以使用这段代码来计算这个函数 for i in 2 nrow df B i lt 1 2 B i
  • 在 R 中使用 nls 重新创建研究

    我正在学习如何在 R 中使用 nls 函数 但遇到了一些问题 我现在只是试图重新创建研究论文中发现的曲线 该模型拟合了 1987 年崩盘前股市走势的曲线 我定义了一个函数func 如下 func lt function a b tc t a

随机推荐

  • @grant 指令并通过页面检测用户脚本

    我的问题有两个方面 首先 有人可以解释一下使用的优点和缺点是什么 grant none在坦普尔猴子 第二 哪个 grant我应该使用哪些值来防止网页检测到脚本 grant https www tampermonkey net documen
  • rabbitmq 使用线程与 pika

    我正在尝试使用rabbitmq 获得一个基本的队列系统 但是当我尝试使用线程时 它似乎只运行1 个线程 my code import pika import threading rabbit url amqp user email prot
  • 异步委托与线程

    用异步委托 回调 替换线程 不是线程池线程 我的场景 为每个客户端生成一个 Thread del beginInvoke 据我说 Reasons 需要通过回调通知 在回调中再次调用委托 避免线程开销 委托使用线程池线程 传递参数 避免转换为
  • 无法绘制 svm 图。 terms.default(x) 中的错误:没有术语组件或属性

    我可以在我的数据集上使用 R 包 e1071 运行 svm 但我无法使用任何两个预测变量来绘制图表 即使在谷歌搜索了很多之后我也无法找到它的解决方案 请专家帮我解决这个问题 我有一个具有以下属性的数据集 gt dim fulldata 1
  • 使用 preg_match_all() 或更好的函数获取标签之间的所有文本?

    2010 June 11
  • Eclipse 代码格式化插件

    有人可以建议我一个插件来格式化 HTML 和 JAVA 代码并具有适当的缩进等吗 Eclipse 中有内置选项吗 使用源 gt 格式或 CTRL SHIFT F
  • CURLOPT_POSTFIELDS 的curl POST 格式

    当我使用curl via POST并设置CURLOPT POSTFIELD我一定要吗urlencode或者任何特殊格式 例如 如果我想发布 2 个字段 第一个和最后一个 first John last Smith 应该与curl一起使用的确
  • Objective-C 单例内存释放

    如果没有使用垃圾收集器 iPhone 环境 当我的应用程序终止时 我是否应该以某种方式释放共享对象 单例所基于的共享对象 当应用程序退出时 其所有内存都会被释放 因此 只要运行时不使用太多内存 释放对象并不重要 即使4 0策略发生变化 单个
  • 如何将逗号分隔值拆分为列

    我有一张这样的桌子 Value String 1 Cleo Smith 我想将逗号分隔的字符串分成两列 Value Name Surname 1 Cleo Smith 我只需要两个固定的额外列 您的目的可以使用以下查询来解决 Select
  • Groovy 和 Java 支持矩阵 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 为了了解哪些 Java Groovy 组合可以工作 我正在寻找一个可以显示此信息的矩阵 两者都开启ht
  • redis.lpush 一些项目

    In my node js脚本我有一个字符串数组 我想要LPUSH将这些字符串放入 Redis 队列中 我试过 var redis require redis createClient redis lpush queue 1 2 3 这会导
  • MongoDB ObjectID 对于会话 ID 来说是安全的

    我正在为 Happstack 服务器制作一个会话系统 并使用 mongoDB 进行持久存储 我想知道 MongoDB ObjectID 用作会话 ID 是否安全 一般来说 MongoDB ObjectID 是全局唯一的 因此如果您担心冲突
  • 使用push_back将整数放入字符串中

    我正在尝试使用以下代码将整数放入字符串中 int x 42 string num bool negative false if x lt 0 negative true x x 1 while x gt 0 num push back x
  • 如何从 SwiftyJSON 创建对象

    我有一个代码 可以解析 JSON 的问题列表 并且可以获得每个属性 如何迭代整个文件并为每个问题创建一个对象 class ViewController UIViewController var hoge JSON override func
  • 加速 mysql 转储和导入 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • AsyncWaitHandle.WaitOne 是否会阻塞 CLR 线程?或者它会创建一个 I/O 完成端口吗?

    我有这个问题 请问AsyncWaitHandle WaitOne阻塞CLR线程 或者它是否创建一个 I O 完成端口 例如 当我运行我的应用程序时 我启动一个任务 A 来初始化一些数据 当新请求到达时 我希望它们等到 A 完成 这样我就可以
  • 识别时间数据的差距

    EDIT 我找到了解决以下问题的方法 但是 它适用于小型数据集 但仍然会在大型数据集上创建错误输出 有人知道为什么吗 我找不到错误 这是代码 df continuous lt unlist lapply split df df ID fun
  • 如何在nginx中禁用http2

    due to this https openradar appspot com 26406397Safari 与 HTTP 2 和表单 POSTS 相关的问题 我想禁用通过 HTTP 2 提供一个网页的功能 所以我只是从相应的 nginx
  • 在函数式程序中获取 I/O

    所以我知道你不能在函数式程序中直接从用户那里获取输入 因为它显然不是纯粹的 但如果用户只有 4 个选项可供选择 这仍然适用吗 例如 如果你要求头发颜色 并且有四种选项可供选择 棕色 黑色 金色 红色 那么它是否仍然不纯 如果用户点击与他们的
  • 结合基于多个条件的观察结果

    目前我正在撰写硕士论文 但是 在多个条件下组合行时遇到一些问题 我在下面说明了我的问题和期望的结果 我希望你可以帮助我 这是我的数据集的示例 df lt data frame userID c 1 1 1 1 1 2 2 3 3 3 3 s