如何计算连续行的时间差

2024-04-19

原始数据如下所示,我想按访问者和时间对其进行排序,以计算行中的时间差,然后将其保存到新文件中。

  visitor         v_time payment items
1    Jack 1/2/2018 16:07      35     3
2    Jack 1/2/2018 16:09     160     1
3   David 1/2/2018 16:12      25     2
4    Kate 1/2/2018 16:16       3     3
5   David 1/2/2018 16:21      25     5
6    Jack 1/2/2018 16:32      85     5
7    Kate 1/2/2018 16:33     639     3
8    Jack 1/2/2018 16:55       6     2

分组和排序就ok了。但它无法计算时间差,也无法保存文件。

visitor <- c("Jack", "Jack", "David", "Kate", "David", "Jack", "Kate", "Jack")
v_time <- c("1/2/2018 16:07","1/2/2018 16:09","1/2/2018 16:12","1/2/2018 16:16","1/2/2018 16:21","1/2/2018 16:32","1/2/2018 16:33", "1/2/2018 16:55")
payment <- c(35,160,25,3,25,85,639,6)
items <- c(3,1,2,3,5,5,3,2)
df <- data.frame(visitor, v_time, payment, items)

df %>%
  arrange(visitor, v_time) %>%
  group_by(visitor) %>%
  mutate(diff = strptime(v_time, "%d/%m/%Y %H:%M") - lag(strptime(v_time, "%d/%m/%Y %H:%M")), diff_secs = as.numeric(diff, units = 'secs'))

write.csv(df,"C:/output.csv", row.names = F)

我的错误是什么以及正确的做法是什么?

# A tibble: 8 x 6
# Groups: visitor [3]
  visitor v_time         payment items diff   diff_secs
  <fct>   <fct>            <dbl> <dbl> <time>     <dbl>
1 David   1/2/2018 16:12   25.0   2.00 NA            NA
2 David   1/2/2018 16:21   25.0   5.00 NA            NA
3 Jack    1/2/2018 16:07   35.0   3.00 NA            NA
4 Jack    1/2/2018 16:09  160     1.00 NA            NA
5 Jack    1/2/2018 16:32   85.0   5.00 NA            NA
6 Jack    1/2/2018 16:55    6.00  2.00 NA            NA
7 Kate    1/2/2018 16:16    3.00  3.00 NA            NA
8 Kate    1/2/2018 16:33  639     3.00 NA            NA

当你刚刚添加default = strptime(v_time, "%d/%m/%Y %H:%M")[1] to the lag part:

df <- df %>%
  arrange(visitor, v_time) %>%
  group_by(visitor) %>%
  mutate(diff = strptime(v_time, "%d/%m/%Y %H:%M") - lag(strptime(v_time, "%d/%m/%Y %H:%M"), default = strptime(v_time, "%d/%m/%Y %H:%M")[1]),
         diff_secs = as.numeric(diff, units = 'secs'))

你会得到你期望的结果:

> df
# A tibble: 8 x 6
# Groups:   visitor [3]
  visitor v_time         payment items diff   diff_secs
  <fct>   <fct>            <dbl> <dbl> <time>     <dbl>
1 David   1/2/2018 16:12     25.    2. 0             0.
2 David   1/2/2018 16:21     25.    5. 540         540.
3 Jack    1/2/2018 16:07     35.    3. 0             0.
4 Jack    1/2/2018 16:09    160.    1. 120         120.
5 Jack    1/2/2018 16:32     85.    5. 1380       1380.
6 Jack    1/2/2018 16:55      6.    2. 1380       1380.
7 Kate    1/2/2018 16:16      3.    3. 0             0.
8 Kate    1/2/2018 16:33    639.    3. 1020       1020.

另一种选择是使用difftime:

df <- df %>%
  arrange(visitor, v_time) %>%
  group_by(visitor) %>%
  mutate(diff = difftime(strptime(v_time, "%d/%m/%Y %H:%M"), lag(strptime(v_time, "%d/%m/%Y %H:%M"), default = strptime(v_time, "%d/%m/%Y %H:%M")[1]), units = 'mins'),
         diff_secs = as.numeric(diff, units = 'secs'))

now the diff- 列以分钟为单位,并且diff_sec-列以秒为单位:

> df
# A tibble: 8 x 6
# Groups:   visitor [3]
  visitor v_time         payment items diff   diff_secs
  <fct>   <fct>            <dbl> <dbl> <time>     <dbl>
1 David   1/2/2018 16:12     25.    2. 0             0.
2 David   1/2/2018 16:21     25.    5. 9           540.
3 Jack    1/2/2018 16:07     35.    3. 0             0.
4 Jack    1/2/2018 16:09    160.    1. 2           120.
5 Jack    1/2/2018 16:32     85.    5. 23         1380.
6 Jack    1/2/2018 16:55      6.    2. 23         1380.
7 Kate    1/2/2018 16:16      3.    3. 0             0.
8 Kate    1/2/2018 16:33    639.    3. 17         1020.

您现在可以再次保存结果write.csv(df,"C:/output.csv", row.names = FALSE)

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

如何计算连续行的时间差 的相关文章

  • R 在 readHTMLTable 调用维基百科时崩溃

    尝试抓取维基百科页面 类似的事情我之前已经做过很多次了 library XML myURL lt http en wikipedia org wiki List of US Open MenUs Singles champions y lt
  • 在 KRL 中如何获取当前的年、月、日?

    我正在开发一个应用程序 需要获取当前的年 月和日 有没有办法在规则的前块中获取此信息 我可以以字符串或数字或两者的形式获取此数据吗 目前有时间函数记录在http docs kynetx com docs Time http docs kyn
  • 使用整洁的评估语义通过字符向量进行 group_by

    我曾经这样做过 使用group by library dplyr group by lt c cyl vs mtcars gt group by dots group by gt summarise gear mean gear but n
  • 使用列表列对 data.table 进行分组

    我有一个非常大的问题 循环遍历 data table 来做我想做的事情太慢了 所以我试图绕过循环 假设我有一个 data table 如下 a lt data table i c 1 2 3 j c 2 2 6 k list c a b c
  • 在两列上使用 Rollapply

    我正在尝试做类似我要求的事情here https stackoverflow com questions 4472691 calculate returns over period of time不幸的是我无法解决这个问题 这是我的数据框
  • 加载包时 R 会话中止

    我的 RStudio 0 99 879 R 3 2 3 OSX 10 11 3 崩溃R Session Aborted每次运行都会出现错误提示require ggvis v0 4 2 我已经重新安装了 R RStudio 和 ggvis 没
  • 在数据框中搜索唯一值并用它们创建表

    自从我不久前开始使用 R URL 将类似于此示例格式 可在 源 列中找到 URL 中对我来说很重要的部分是 utm source ADX 位 我的数据如下所示 用户 来源 1 2 3 我需要做的是从 URL 中捕获 utm source 并
  • dplyr - 分组并选择 TOP x %

    使用 dplyr 包和函数sample frac可以从每个组中抽取一定比例的样本 我需要的是首先对每个组中的元素进行排序 然后从每个组中选择前 x 有一个功能top n 但这里我只能确定行数 并且我需要一个相对值 例如 以下数据按齿轮分组并
  • 将 HTML 表格转换为 R 数据框

    table cellspacing 1 cellpadding 7 border 1 thead tr td align left valign middle nbsp td td align left 1a My peers make a
  • '%>%' 没有可见的全局函数定义

    我正在尝试构建一个 devtools 包 并且我需要在我的代码中使用此循环 for i in 1 length idk tritemp intetemp intetemp path in idk i tritemp tritemp gt g
  • R 中从右到左的运算符结合性可能吗?

    我是 R 新手 我刚刚发现我患有支架恐惧症 https mathematica stackexchange com a 17315 2266 请参阅链接中的评论 我喜欢这种方式magrittr符号 gt 有效 因为它在某些情况下避免了嵌套括
  • 在 OS X 10.7.4 上安装 RSRuby 时找不到库

    我正在尝试在我的 Mac 上安装 RSRuby 调用后 sudo gem install rsruby 我收到此错误 ERROR Cannot find the R library aborting extconf rb failed Co
  • 如何将 igraph 中的边标签与边分开?

    我想移动边缘标签的位置 使其不在其上方 这是一个小例子 g lt graph empty n 3 g lt graph c 1 2 3 2 1 3 directed T E g weight lt c 3 2 5 plot g edge l
  • R模糊字符串匹配根据匹配的字符串返回特定列

    我有两个大型数据集 一个大约有 50 万条记录 另一个大约有 7 万条记录 这些数据集有地址 我想匹配较小数据集中的任何地址是否存在于大数据集中 正如您所想象的那样 地址可以用不同的方式和不同的情况 拼写等来书写 此外 如果只写到建筑物级别
  • 使用 pandas 的 TimeGrouper() 按 1 秒的间隔查找列计数

    考虑由时间戳索引的数据帧 数据 如下所示 Index Receiver Type Retry 1970 01 01 00 00 00 000000000 R1 Data 1 1970 01 01 00 00 00 800000000 R1
  • R:为绘图标题、轴标签或图例创建拉丁语/希腊语表达向量

    我想合并拉丁文和希腊文文本的向量以生成绘图标题 轴标签 图例条目等 我在下面提供了一个简单的示例 我不知道如何以原始形式呈现希腊字母 我尝试过各种组合expression parse and apply to the paste命令 但我无
  • “马来半岛标准时间”的时区问题

    我有一个在 C 上运行以下代码的程序 TimeZoneInfo localZone TimeZoneInfo Local string timeZone TimeZoneInfo FindSystemTimeZoneById localZo
  • 如何使用列的平均值将列添加到 DataFrame

    有没有更好的办法 val mean df select avg date first getDouble 0 df withColumn mean lit mean 我认为避免采取行动是值得的 可以使用以下方法避免额外的操作broadcas
  • 从纪元到相对日期的秒数

    我正在处理自纪元以来的日期 并且已经得到了 例如 date 6928727 56235 我想将其转换为另一种相对格式 以便我能够将其转换为与纪元相关的格式 使用 time gmtime date 它返回 year 1970 mon 3 da
  • 更改列名称的字母大小写

    我有大量数据集 每个数据集都包含一长串列名 在某些文件中 列名称全部大写 而在某些文件中 仅列名称的第一个字母大写 我需要附加数据集 并认为匹配数据集中的列名称的最简单方法是将全大写名称转换为仅第一个字母大写的名称 我希望找到一个通用的解决

随机推荐

  • 从外部源填充运行时天蓝色管道参数

    我们希望创建一个管道来更新我们的多租户 Azure 环境 我们需要在每个租户的更新过程中执行一些操作 为了实现这一目标 我们希望为每个租户创建一个作业 以便我们可以并行处理租户 为了实现此目的 我想使用运行时参数来传递租户以更新到我的管道
  • OSX 中的 python 地穴

    我有一个 Django 应用程序 它可以重置 Ubuntu 机器上运行的 unix 用户密码 但我的开发环境是 OS X 我遇到了这种恼人的情况 OS X gt gt gt import crypt gt gt gt crypt crypt
  • C/C++:如何将数据存储在B树中的文件中

    在我看来 将数据作为文件存储在 B 树中的一种方法可以使用 C 语言使用具有结构序列 数组 的二进制文件来有效完成 每个结构代表一个节点 因此 我们可以使用类似于使用数组创建链表的方法来连接各个节点 但随之而来的问题是删除节点 因为在一个大
  • “RPC 服务器不可用。”循环遍历Word文档时

    我正在开发一个实用程序来查找和更新 Word 中的 DOC 变量 我有一段代码可以循环遍历文档并显示带有变量名称的消息框 但是当它尝试打开下一个文档时收到错误 错误是 System Runtime InteropServices COMEx
  • 加入日历表 - 5 个工作日

    所以这是这里的一个常见问题 但我还没有找到真正适合我的特定需求的答案 我有 2 张桌子 其中有一个 ProjectClosedDates 列表 另一个表是一个类似于 2025 年的日历表 其中包含表示行日期是否为周末的列 以及另一列表示假日
  • php 中的 SVG 到 PNG 图像转换

    我想将 SVG 图像转换为具有透明背景的 PNG 文件 我使用下面的代码在 php 中使用 imagick 对其进行转换 但它给出了黑色背景的图像 image new imagick set transparent background i
  • 在 O(n) 中获取作为唯一给定索引的函数的排列

    我想要一个函数get permutation给定一个列表l和一个索引i 返回一个排列l这样排列对于所有人来说都是唯一的i大于0并低于n where n len l I e get permutation l i get permutatio
  • 如何在 OpenCV 中绘制图像的 3D 直方图

    更新 我找到更多例子 我现在可以做到 我可以在 3d 中绘制多个直方图吗 https stackoverflow com questions 35210337 can i plot several histograms in 3d 我知道这
  • 标准化浮点数 f 之后(之前)的下一个标准化浮点数是什么?

    给定一个标准化浮点数 f 下一个是什么归一化f 之后 之前的浮点数 通过一些调整 提取尾数和指数 我有 next normalized double if mantissa is not all ones maximally denorma
  • 如何快速过滤 Realm 中为当前日期创建的事件?

    如何快速过滤 Realm 中为当前日期创建的事件 我尝试了类似下面的方法 但是这是错误的 let dtSource datasource filter Create NSDate count Update 获取将我的日期创建为字符串的过滤器
  • Python json内存膨胀

    import json import time from itertools import count def keygen size for i in count 1 s str i yield 0 size len s str s de
  • 设置子视图以适合系统窗口

    我正在设置一个简单的视图 其中仅包含一个空的RelativeLayout
  • 如何启动第二个 Java 进程?

    如何启动第二个独立于平台的 Java 进程 理想情况下 它应该与当前运行的 Java 版本相同 有什么有用的系统属性吗 您可以使用java home系统属性来查找当前的 JVM String jvm new java io File new
  • 如何以编程方式获取 iOS 状态栏高度

    我知道目前 iPhone iPad 顶部的状态栏 包含时间 电池和网络连接 对于非视网膜屏幕为 20 像素 对于视网膜屏幕为 40 像素 但为了未来证明我的应用程序 我希望无需硬编码值即可确定这一点 是否可以通过编程计算出状态栏的高度 UI
  • Q_PROPERTY NOTIFY 信号及其参数

    我有写 propertyChanged 的习惯signals 带参数 这样接收端就不需要调用Q PROPERTY s READ明确地发挥作用 我这样做是出于清晰的考虑 并且假设在 QML 数据绑定情况下 不需要对 getter 进行 昂贵
  • 如何在 TypeScript 中创建本地模块

    我已经在文件夹中创建了src modules my module 其中有package json并定义了导出我们需要的所有内容的主文件 我现在可以从中导入import A from modules my module 我想将语法更改为imp
  • 如何通过sql查询在数据库中只保存时间而不保存日期

    此查询正在保存完整的日期和时间 但我只想在数据库中保存时间而不是日期 有什么查询可以做到这一点吗 update table set current time now 您的列必须设置为 DATETIME 或 TIMESTAMP 如果您使用 T
  • 使用 Google Apps 脚本抓取动态网页

    我想使用其他网站读取项目的一些数据谷歌脚本 https script google com 有问题的页面是Dyanmic 它们包含在初始页面加载后通过 JavaScript 调用服务器加载的内容 通常 对于一些静态内容 这工作得很好 但我对
  • 无法将 CSS 应用于 html 字符串

    我正在尝试将 evoPDF 集成到我的 asp net 应用程序上 我通过 ajax 从我的 html 文件 onclick 发送部分 html 直到这一部分一切正常 现在 当我从 EvoPdf API 调用这些方法时 1 GetPdfBy
  • 如何计算连续行的时间差

    原始数据如下所示 我想按访问者和时间对其进行排序 以计算行中的时间差 然后将其保存到新文件中 visitor v time payment items 1 Jack 1 2 2018 16 07 35 3 2 Jack 1 2 2018 1