如何按组计算 data.frame 与前一行的时间差

2024-01-04

我试图解决的问题是我有一个数据框,其中包含排序的 POSIXct 变量。每行都进行分类,我想获取每个级别的每行之间的时间差,并将该数据添加回新变量中。可重现的问题如下。 以下函数仅用于创建随机时间的样本数据 为了这个问题的目的。

random.time <- function(N, start, end) {
  st <- as.POSIXct(start)
  en <- as.POSIXct(end)
  dt <- as.numeric(difftime(en, st, unit="sec"))
  ev <- sort(runif(N, 0, dt))
  rt <- st + ev
  return(rt)
}

模拟问题的代码如下:

set.seed(123)
category <- sample(LETTERS[1:5], 20, replace=TRUE)
randtime <- random.time(20, '2015/06/01 08:00:00', '2015/06/01 18:00:00')
df <- data.frame(category, randtime)

预期结果数据框如下:

>category randtime timediff (secs)
>A  2015-06-01 09:05:00 0
>A  2015-06-01 09:06:30 90
>A  2015-06-01 09:10:00 210
>B  2015-06-01 10:18:58 0
>B  2015-06-01 10:19:58 60
>C  2015-06-01 08:14:00 0
>C  2015-06-01 08:16:30 150

输出中的每个子组的第一行的 timediff 值为 0,因为没有前一行。我能够按类别分组并调用以下函数来计算差异,但无法让它整理所有类别组的最终输出。

getTimeDiff <- function(x) {
  no_rows <- nrow(x)
  if(no_rows > 1) {
    for(i in 2:no_rows) {
      t <- x[i, "randtime"] - x[i-1, "randtime"]
    }
  }
}

我已经在这里呆了两天了,但没有运气,所以非常感谢任何帮助。 谢谢。


尝试这个:

library(dplyr)
df %>%
  arrange(category, randtime) %>%
  group_by(category) %>%
  mutate(diff = randtime - lag(randtime),
         diff_secs = as.numeric(diff, units = 'secs'))

#   category            randtime             diff   diff_secs
#     (fctr)              (time)           (dfft)       (dbl)
# 1        A 2015-06-01 11:10:54         NA hours          NA
# 2        A 2015-06-01 15:35:04   4.402785 hours   15850.027
# 3        A 2015-06-01 17:01:22   1.438395 hours    5178.222
# 4        B 2015-06-01 08:14:46         NA hours          NA
# 5        B 2015-06-01 16:53:43 518.955379 hours 1868239.364
# 6        B 2015-06-01 17:37:48  44.090950 hours  158727.420

您可能还想添加replace(is.na(.), 0)到链条。

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

如何按组计算 data.frame 与前一行的时间差 的相关文章

随机推荐

  • Keycloak Spring UMA 被拒绝

    我正在尝试为此用例实施授权 用户只能访问自己的资源 管理员可以访问所有内容 我正在尝试 Keycloak 和它的资源服务器 为了测试目的并了解这些范围和权限等内容 我创建了测试客户端weather api和一项资源Weather带网址 we
  • Powershell - 删除容器中的所有斑点

    在备份到特定容器之前 我需要删除该容器中的所有 blob 以下不起作用 执行此操作的正确方法是什么 Get AzStorageBlob Container ContainerName Context ctx Remove AzStorage
  • 按日期时间对 DirectorySearcher 查询的结果进行排序

    我有以下代码 Declare new DirectoryEntry and DirectorySearcher DirectoryEntry domainRoot new DirectoryEntry LDAP rootDSE string
  • 顺序错误(datastate$c):参数 1 不是向量

    best lt function state outcome data read csv outcome of care measures csv colClasses character data 11 lt as numeric dat
  • 调整 Firebase 存储中存储的所有图像的大小

    我已在 Firebase Storage Bucket 上上传了大约 10k 个高分辨率图像 截至目前 由于带宽较高 我需要缩小存储桶中的这些图像而不删除原始图像 Firebase 图像调整大小扩展功能解决了这个问题 但仅适用于新上传的图像
  • 为什么 Awaiters (async/await) 是结构体而不是类?可以使用类吗?

    为什么等待者 GetAwaiter 使类可等待 是结构而不是类 使用类有什么坏处吗 public struct ConfiguredTaskAwaiter ICriticalNotifyCompletion http referenceso
  • 使用 npm install 时出现 SELF_SIGNED_CERT_IN_CHAIN 错误

    每当我运行 npm install 时 都会出现错误 错误 SELF SIGNED CERT IN CHAIN 如何解决这个错误 即使我曾经遇到过这个错误 尝试执行以下步骤 克服此错误应遵循的步骤 1 按顺序运行这三个命令 npm 配置设置
  • FancyBox 2.0.6 标题超过 1 行

    我正在尝试做与这里解释的完全相同的事情 设置 FancyBox 标题的格式 https stackoverflow com questions 6046680 formatting a title for fancybox 问题是我使用的是
  • 仅反转sql server中字符串的数字部分

    使用 T SQL 我试图找到反转字符串中数字的最简单方法 所以对于像这样的字符串Test123Hello have Test321Hello Before After Test123Hello Test321Hello Tt143 Hell
  • Groovy Grails - 为后续请求存储对象

    我有一个 Web 应用程序 前端向服务器发出 ajax 请求以获取数据 在控制器中我有以下逻辑 def data def method def objects from params determine if it is a first r
  • C# 从静态函数中打印类名

    是否可以从静态函数中打印类名 e g public class foo static void printName Print the class name e g foo 您可以通过三个选项来获取类型 以及名称 YourClass在静态函
  • 使用STL容器进行中值计算时正确的做法是什么?

    假设我需要从 1000000 个随机数值序列中检索中位数 如果使用任何东西but std list 我没有 内置 方法对序列进行排序以进行中值计算 如果使用std list 我无法随机访问值来检索排序序列的中间 中位数 自己实现排序并使用例
  • 如何在Fragment类中加载WebView?如何在android中加载Webview?

    我正在尝试在应该加载的片段中创建一个 WebView 我已经将其添加到我的 xml 文件中 但是 findViewById 方法仅在我扩展 Activity 类时才有效 无论如何 我也可以在 Fragment 中使用它吗 我已经测试了另一个
  • 如何将浮点数和泛型类型相乘?

    我正在 OS X 上使用 C 在 Unity 3 4 2 中进行编程 我有一堂课如下 class Foo
  • MVC Url 请求 - 路径中存在非法字符

    概述 404错误页面在web config中配置并工作 使用 Umbraco v6 2 自定义错误设置为RemoteOnly 问题是当我在 URL 中输入 7C 时 我收到以下消息 Illegal characters in path De
  • 通过 simctl 启动时如何设置 iOS 模拟器语言

    我正在模拟器中使用启动我的应用程序xcrun simctl 我希望能够设置模拟器启动时使用的语言 即 一次运行时切换为法语 另一次运行时切换为英语 有没有办法做到这一点 以前是可以用的 AppleLanguages模拟器的选项 但似乎不再起
  • 是否可以从 JAXB 注释的类生成 XSD?

    我已经使用 JAXB 编写了许多类进行序列化 我想知道是否有一种方法可以根据注释为每个对象生成 XSD 文件 有这个工具吗 就像是generate xsd com my package model Unit java将会awesome 有什
  • 垃圾收集器如何处理 Java 中的原始数据类型?

    正如我们所知 对象通过引用计数和其他此类算法来工作 但对于原始数据类型 我们做不到NULL like int a NULL 垃圾收集器如何处理 Java 中的原始数据类型 原始数据类型要么是对象中的字段 要么是在本身就是对象的数组中使用 对
  • 如何修复 PHPMailer __autoload() 错误?

    我使用 phpMailer 来处理从网站发送的邮件 今天早上我突然收到这样的消息 致命错误 不再支持 autoload 请在第 45 行的 C xampp htdocs webapp PHPMailerAutoload php 中使用 sp
  • 如何按组计算 data.frame 与前一行的时间差

    我试图解决的问题是我有一个数据框 其中包含排序的 POSIXct 变量 每行都进行分类 我想获取每个级别的每行之间的时间差 并将该数据添加回新变量中 可重现的问题如下 以下函数仅用于创建随机时间的样本数据 为了这个问题的目的 random