在 R 中查找观察值之间的时间差

2024-04-26

我正在尝试确定两次观察之间的时间差。数据由不同的个人分解,每个人都有自己唯一的 ID。我有一个数据集,它告诉我每次状态发生变化时他们的状态会更新什么,以及他们的状态何时发生变化。状态可以是两个值之一,并且它总是更改为它不是的值(在本例中,从 Y 到 N,或从 N 到 Y)。

数据如下:

ID Status Time
1    Y     2013-07-01 08:07:00      
2    Y     2013-07-01 08:07:03  
3    Y     2013-07-01 08:07:04      
4    Y     2013-07-01 08:07:06      
1    N     2013-07-01 08:07:07      
2    N     2013-07-01 08:07:23      
5    Y     2013-07-01 08:07:34  
6    Y     2013-07-01 08:07:45  
7    Y     2013-07-01 08:07:47  
1    Y     2013-07-01 08:07:56  
3    N     2013-07-01 08:07:58  

我想找到的是每个 ID 的每次状态更改之间经过的时间量 - 即从 Y 到 N 需要多长时间。然后获得汇总统计信息,例如经过时间的分布,平均值经过的时间等

因此,示例输出可能如下所示,记录上面发生的三个 Y 到 N 切换(1 个切换、2 个切换和 3 个切换)

Y to N change    Time elapsed (in seconds)
1                     7 
2                     20
3                     54

由于某种原因,我在这方面遇到了很多麻烦。现在我有 POSIXlt 格式的时间,以及 ID 和状态作为因素。我尝试过使用 ddply 按 ID 对数据进行排序,然后按时间戳对数据进行排序,但这到目前为止还没有奏效。任何建议将不胜感激!

编辑:将时间更改为实际的正确类型。

Edit2:最终在等待更多答案的同时编写了一个解决方案。我的方法比这里的许多解决方案要丑陋得多,但我做到了:

N <- ifelse(df$Status=="N",1,0)
Y <- ifelse(df$Status== "Y",1,0)

#making a vector which is 1 for a row if the item status of the row below it is N
var1 <- N
for (i in 1:nrow(df)) {
  var1[i] <- N[i+1]
}

#making a vector which is TRUE if a row's item status is Y and the row after is N
check <- ifelse(var1==s & var1==1,TRUE,FALSE)
#had to define the last one as FALSE manually because the for loop above would miss the last entry due to how it was constructed
check [50000]=FALSE



#made a loop which finds the time difference for a row's TIME and the row below it, given that "check " is true for that row, and writes that to a results vector.
#here is the results vector
results <- numeric(nrow(df))
#here is the for loop
for (i in 1:nrow(df)) {
  if(check [i]){
    results[i] <- difftime(df$Time[i],df$Time[i+1])
  }
}

我最初用 for 循环解决了这个问题,但是在我的实际数据集的大约 100 万行中,它太慢了,所以我做了这个矢量化的东西。这些其他解决方案适用于这么大的数据吗?我一定会尝试一下!


这是另一种方法。我试图将所有数据保留在此处的最终输出中。请注意,出于演示目的,我对您的数据进行了一些修改。在我的代码中,我首先按以下方式排列数据ID and Time。然后我就改变了Status(即 Y 和 N)为 0 和 1 以创建group. Here, group可以告诉我们什么时候Status改变了。如果您看到几行出现相同的数字,则意味着Status没有改变。然后,我计算了时间差(即gap)对于每个 ID。终于,我改变了gap对于每组,未出现在第一行的值为 NA。也就是说,我做了不必要的间隙 NA。请注意,每个 ID 的第一个观察值在gap以及。gap排在第二位。

ann <- data.frame(ID = c(1,2,3,4,1,2,2,1,1,1,3),
                  Status = c("Y", "Y", "Y", "Y",
                             "N", "N", "Y", "Y", "Y", "N", "N"),
                  Time = c("2013-07-01 08:07:00", "2013-07-01 08:07:03",
                           "2013-07-01 08:07:04", "2013-07-01 08:07:06",
                           "2013-07-01 08:07:07", "2013-07-01 08:07:23",
                           "2013-07-01 08:07:34", "2013-07-01 08:07:45",
                           "2013-07-01 08:07:47", "2013-07-01 08:07:56",
                           "2013-07-01 08:07:58"),
                  stringsAsFactors = FALSE)

ann$Time <- as.POSIXct(ann$Time)

#   ID Status                Time
#1   1      Y 2013-07-01 08:07:00
#2   2      Y 2013-07-01 08:07:03
#3   3      Y 2013-07-01 08:07:04
#4   4      Y 2013-07-01 08:07:06
#5   1      N 2013-07-01 08:07:07
#6   2      N 2013-07-01 08:07:23
#7   2      Y 2013-07-01 08:07:34
#8   1      Y 2013-07-01 08:07:45
#9   1      Y 2013-07-01 08:07:47
#10  1      N 2013-07-01 08:07:56
#11  3      N 2013-07-01 08:07:58

ann %>%
    arrange(ID, Time) %>%
    group_by(ID) %>%
    mutate(Status = ifelse(Status == "Y", 1, 0),
           group = cumsum(c(T, diff(Status) != 0)),
           gap = Time - lag(Time)) %>%
    group_by(ID, group) %>%
    mutate(gap = ifelse(row_number() != 1, NA, gap))

#   ID Status                Time group gap
#1   1      1 2013-07-01 08:07:00     1  NA
#2   1      0 2013-07-01 08:07:07     2   7
#3   1      1 2013-07-01 08:07:45     3  38
#4   1      1 2013-07-01 08:07:47     3  NA
#5   1      0 2013-07-01 08:07:56     4   9
#6   2      1 2013-07-01 08:07:03     1  NA
#7   2      0 2013-07-01 08:07:23     2  20
#8   2      1 2013-07-01 08:07:34     3  11
#9   3      1 2013-07-01 08:07:04     1  NA
#10  3      0 2013-07-01 08:07:58     2  54
#11  4      1 2013-07-01 08:07:06     1  NA
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 R 中查找观察值之间的时间差 的相关文章

  • R 中从右到左的运算符结合性可能吗?

    我是 R 新手 我刚刚发现我患有支架恐惧症 https mathematica stackexchange com a 17315 2266 请参阅链接中的评论 我喜欢这种方式magrittr符号 gt 有效 因为它在某些情况下避免了嵌套括
  • 将逻辑回归从 R 迁移到 rpy2

    我正在尝试使用 ryp2 进行逻辑回归 我设法执行它 但不知道如何从结果中提取系数和 p 值 我不想在屏幕上打印这些值 而是创建一个函数来独立使用它们 import rpy2 robjects as ro mydata ro r data
  • R randomForest - 如何使用“getTree”树进行预测

    背景 我可以在 R 中创建一个随机森林 set seed 1 library randomForest data iris model rf lt randomForest Species data iris importance TRUE
  • R 编程:创建堆叠条形图,每个堆叠条形具有可变颜色

    我正在尝试创建一个堆叠条形图 每个堆叠条形图中的颜色可变 也就是说 一个条形图在红色上方显示蓝色 下一个条形图在紫色上方显示红色 等等 我还想保留堆叠图表的功能 十分感谢大家 Adam 下图 使用上面的代码创建 显示了主要汽车制造商生产的汽
  • R 从 .CSV 创建 NetCDF

    我正在尝试从 csv 文件创建 NetCDF 我在这里和其他地方读过一些教程 但仍然有一些疑问 我有一个这样的表 lat long time rh temp 41 109 6 1 1 40 107 18 2 2 39 105 6 3 3 4
  • 更改列名称的字母大小写

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

    例如 我有这三个数据集 就我而言 它们更多并且有很多变量 data frame1 lt data frame a c 1 5 3 3 2 b c 3 6 1 5 5 c c 4 4 1 9 2 data frame2 lt data fra
  • 估算缺失数据,同时强制相关系数保持不变

    考虑以下 excel 数据集 m r 2 0 3 3 0 8 4 0 1 3 2 1 5 2 2 3 1 9 2 5 1 2 3 0 2 0 2 6 我的目标是使用以下条件填充缺失值 将上述两列之间的成对相关性表示为 R 大约 0 68 将
  • 闪亮的如何阻止用户访问选项卡?

    我需要阻止用户访问其他选项卡 直到完成某些操作 在这个可重现的示例中 我想阻止用户访问Tab 2直到他按下按钮 该应用程序如下所示 这是该应用程序的代码 library shiny ui lt shinyUI navbarPage tabP
  • 如何避免循环

    大家好 我是 R 新手 我有两个面板数据文件 其中包含 id date 和 ret 列 文件 A 的数据比文件 B 多得多 但我主要处理文件 B 数据 id 和 date 的组合是唯一标识符 有没有一种优雅的方式来查找 B 中的每个 id
  • 有皮茨时区列表吗?

    我想知道 Python 库 pytz 中时区参数的所有可能值是什么 怎么做 您可以列出所有可用的时区pytz all timezones In 40 import pytz In 41 pytz all timezones Out 42 A
  • R2WinBUGS - 使用模拟数据进行逻辑回归

    我只是想知道是否有人有一些使用 R2WinBUGS 包来运行逻辑回归的 R 代码 理想情况下使用模拟数据来生成 真相 和两个连续协变量 Thanks 基督教 PS 生成人工数据 一维情况 并通过 r2winbugs 运行 winbugs 的
  • 如何找到每个分类变量的连续变量的平均值

    我想在 y 轴上绘制连续的 BMI 在 x 轴上绘制家庭收入的分类变量 并且我希望该图绘制每个类别的平均 BMI 然而 我不知道如何找到家庭收入每个因素的平均体重指数 Dataset nh 5994 total IDs with Obser
  • 自动化 RStudio 处理 RMarkdown?

    我有一个 RMarkdown 文件 用于生成漂亮的 HTML 报告 问题是 我希望能够自动化它 以便它可以在无头服务器上运行 因此 不会有人启动 Rstudio 并按下 knithtml 按钮 而且 Rstudio 似乎正在做很多额外的魔法
  • 不使用apply函数对data.table的每一行进行操作的方法

    我在下面写了一个简单的函数 mcs lt function v ifelse sum diff sort v gt 6 gt 0 NA sd v 它应该采用一个向量 对其进行排序 然后检查每个连续差异中是否存在大于 6 的差异 如果差值大于
  • R 语言 - 等待用户使用 scan 或 readline 输入

    我试图让用户输入一些关键字进行查询 在我的脚本中我使用了 scan 或 readline 我使用 R 嵌入脚本编辑器 Windows 进行了尝试 但是当我执行代码时 它使用我的下一行脚本作为标准输入 这是我的 部分 脚本 keywords
  • 在闪亮的应用程序和多个页面中进行身份验证

    在我正在开发的系统中 我有 3 个不同的参与者 用户 管理员 支持团队 使用 Shiny App 我想知道如何向这三个参与者进行身份验证 每个参与者只能访问他们的页面 我发现使用闪亮的服务器专业版可以实现这一点 但它不是免费的 有什么方法可
  • 从 foreach 循环赋值

    我想并行化一个循环 例如 td lt data frame cbind c rep 1 4 2 rep 1 5 rep 1 10 2 names td lt c val id res lt rep NA NROW td for i in l
  • R:如何添加具有从矩阵的每一行中随机选择的值的列?

    我会先说我是一个 R 菜鸟 我认为这可能有一个简单的解决方案 但我正在努力寻找它 我有一个 2 列 1 000 行的矩阵 保持行固定 我想创建一个新变量 从两列中随机选择一个元素 例如制作一个简单的矩阵 matrix c 1 1 4 6 1
  • 在Python中:检查文件修改时间是否早于特定日期时间

    我用 C 编写了以下代码来检查文件是否已过期 DateTime lastTimeModified file getLastTimeModified if lastTimeModified HasValue File does not exi

随机推荐

  • 从上传的 csv 数据创建 dataTable 列定义

    M 尝试从上传的 csv 文件创建数据表 我面临的唯一问题是定义表列标题 目前我已经这样做了 手动定义标头 var table example DataTable columns title Number data Number title
  • 在 Swift 中执行 POST 请求

    我正在尝试做这样的事情 NSMutableURLRequest request NSMutableURLRequest requestWithURL NSURL URLWithString http google com request H
  • AttributeError:“Int64Index”对象没有属性“month”

    我有一些时间序列数据 包含三个独立的列 日期 时间 千瓦 如下所示 Date Time kW 3 1 2011 12 15 00 AM 171 36 3 1 2011 12 30 00 AM 181 44 3 1 2011 12 45 00
  • Firestore snapshotChanges DocumentChangeType“已删除”从未发送

    我正在使用 where 子句查询 Firestore 集合 并订阅 snapshotChanges 根据文档 我应该为添加 修改和删除的每个元素获取一个事件 我很好地得到了添加和修改的文档 但我从未得到删除的文档 这是我的代码的示例 thi
  • 使用 QueueLinearFloodFill 算法着色时留下空白

    我正在尝试在android中实现洪水填充算法 它的工作速度非常慢 所以我根据此链接尝试了队列线性洪水填充算法 Android中如何使用洪水填充算法 https stackoverflow com questions 16968412 how
  • 在 Firebase-ios-swift 中创建和附加数组

    如何在firebase 3 0中创建数组并在数组中执行append和delete功能 这是我正在寻找的数据结构 1 UserIds 0 12345 1 678910 2 1112131415 2 UserProfile 0 12345 0
  • React - JSX 语法问题,以及如何迭代地图并在换行符上显示项目

    我是一个 React 菜鸟 正在制作 ToDo 列表样式食谱列表应用程序 https fcc recipebox surge sh 我有一个功能组件 Item js 我使用 JSX 和映射函数来迭代每个配方项并显示它们 我希望每个菜谱项目都
  • 使用PHP通过FTP递归扫描目录和子目录

    我正在尝试创建目录中所有文件 及其大小 的列表 包括子目录中的所有内容 这些文件位于远程服务器上 所以我的脚本通过 FTP 连接 然后使用以下命令运行递归函数ftp chdir浏览每个目录 如果有其他方法可以做到这一点 我愿意接受建议 fl
  • 停止pandoc自动添加id

    我在用Pandoc对Markdown的扩展 http pandoc org MANUAL html pandocs markdown来生成 HTML 以下降价 test specificId test2 test3 生成以下 html h1
  • 如何使用 Xerces 同时使用 Maven 从 XSD 1.1 生成源

    我有一个带有断言标签的 XSD 文件 我读到 Xerces 支持带有这些标签的 XML Schema 1 1 草案 如何在我的 Maven 构建中使用实际的 Xerces 版本 而不是标准 Java 实现 使用 Xerces 版本的一种旧方
  • config_cache_enabled 错误

    使用 Zend 框架 2 1 当我设定 config cache enabled gt true在我的里面application config php 它返回以下错误 Warning var export does not handle c
  • 使用 SessionBean EJBObject 和 EJBHome 接口创建 EJB

    我对创建 EJB 感到困惑 我在互联网上看到了许多 EJB 示例 也看到了使用 SessionBean EJBObject 和 EJBHome 接口开发 EJB 的示例项目 在其他一些示例中 EJB 是在没有这些接口的情况下创建的 并且仅使
  • 如何获取数组中每个数字的阶乘值?

    我试图使用此方法获取数组中每个项目的阶乘值 但这仅输出一个值 任何人都可以帮助我找出我做错的地方吗 function mathh arr fn for i 1 i lt sizeof arr i arr2 arr2 i fn arr i r
  • 如何在 Jackson 和 Gson 之间转换日期?

    在我们的 Spring 配置的 REST 服务器中 我们使用 Jackson 将对象转换为 Json 该对象包含几个 java util Date 对象 当我们尝试使用 Gson 的 fromJson 方法在 Android 设备上反序列化
  • 如何在CSS中捏住一行的中间

    我正在尝试制作一条看起来几乎在末端有衬线的线条 本质上 我想让它在最末端变宽 在中间变细 只需使用 css 这实际上被证明是一个相当大的挑战 任何帮助 将不胜感激 到目前为止 我已经能够了解我想要如何使用 after伪选择器 但顶部没有运气
  • 如何使用shoulda匹配器来测试多态关联?

    我正在使用带有rails的shoulda matchers 并创建一个名为 comments 的模型和另一个名为 post 的模型 评论是多态的 当我在这样的帖子中使用 shoulda 匹配器进行测试时 it should have man
  • 导入错误:没有名为“编码”的模块

    我最近重新安装了ubuntu并升级到16 04并且无法使用python python manage py runserver Could not find platform independent libraries
  • 将 Azure CDN 与共享访问签名结合使用

    我正在尝试合并 Azure 来存储应用程序的大部分文件 我想将这些文件上传到 azure 中的私有容器和私有 blob 并通过 Azure CDN 将这些上传内容复制到所有其他节点 仍然作为私有容器和 blob 然后 我希望我的应用程序向存
  • “from Six.moves import urllib”在 Python 中做什么?

    我在 Python 代码中发现了以下行 from six moves import urllib 同时 我可以找到urllib py任何地方 我发现有一个文件six py在包根目录中 它有class Module six moves url
  • 在 R 中查找观察值之间的时间差

    我正在尝试确定两次观察之间的时间差 数据由不同的个人分解 每个人都有自己唯一的 ID 我有一个数据集 它告诉我每次状态发生变化时他们的状态会更新什么 以及他们的状态何时发生变化 状态可以是两个值之一 并且它总是更改为它不是的值 在本例中 从