通过按ID和其他特定条件分组查找持续时间

林内特

目的:

我有一个数据集df,我想按ID分组并根据某些条件找到持续时间:Focus == True,Read == True和ID!=“”

ID            Date                   Focus        Read


A             1/2/2020 5:00:00 AM    True         True
A             1/2/2020 5:00:05 AM    True         True
              1/3/2020 6:00:00 AM    True
              1/3/2020 6:00:05 AM    True         
B             1/4/2020 7:00:00 AM    True         True
B             1/4/2020 7:00:02 AM    True         True
B             1/4/2020 7:00:10 AM    True         True

我想要这个输出:

ID                          Duration

A                           5 sec
B                           10 sec

dput:

structure(list(ID = structure(c(2L, 2L, 1L, 1L, 3L, 3L, 3L), .Label = c("", 
"A", "B"), class = "factor"), Date = structure(1:7, .Label = c("1/2/2020 5:00:00 AM", 
"1/2/2020 5:00:05 AM", "1/3/2020 6:00:00 AM", "1/3/2020 6:00:05 AM", 
"1/4/2020 7:00:00 AM", "1/4/2020 7:00:02 AM", "1/4/2020 7:00:10 AM"
), class = "factor"), Focus = structure(c(1L, 1L, 1L, 1L, 1L, 
1L, 1L), .Label = "True ", class = "factor"), Read = structure(c(2L, 
2L, 1L, 1L, 2L, 2L, 2L), .Label = c("", "True "), class = "factor")), class = "data.frame", row.names     = c(NA, 
-7L))

我试过的

  df %>% group_by(ID)
  mutate(Date = lubridate::mdy_hms(Date), 
     cond = Focus == "TRUE" & Read=="TRUE" & ID != "" , 
     grp = cumsum(!cond)) %>%
 filter(cond) %>%
 group_by(grp) %>%
 summarise(starttime = first(Date), 
        endtime = last(Date), 
        duration = difftime(endtime, starttime, units = "secs")) %>%
 select(-grp)

但是,这不是按ID分组的,因为我在输出中看不到这一点。

任何建议表示赞赏。

阿克伦

我们可以filter根据“读取”中的“真实”值执行第一个操作,将“日期”转换为“日期时间”类,并按“ ID”分组,获得“持续时间”,即“firstlast之间的差值(以秒为单位)日期'

library(dplyr)
library(lubridate)
df %>% 
   filter(as.logical(trimws(Read)), as.logical(trimws(Focus))) %>%
   mutate(Date = mdy_hms(Date)) %>%
   group_by(ID) %>% 
   summarise(Duration = difftime(last(Date), first(Date), units = "secs"))
# A tibble: 2 x 2
#  ID    Duration
#  <fct> <drtn>  
#1 A      5 secs 
#2 B     10 secs 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据特定条件对数据进行分组并在 R 或 Python 中查找持续时间

按年份分组和其他列,并根据特定条件的熊猫计算平均值

Pandas Timeseries:满足特定条件的总持续时间

如何对时间实例进行分组,找到它的持续时间并根据特定条件(在 R 或 Python 中)对它们求和

按特定条件分组

创建一个持续时间列,其中日期时间的差异按ID分组

ArrayList 按特定条件分组

Kusto - 按持续时间值分组以显示数字

根据条件对数据进行子集和重命名,并在Dplyr中查找持续时间

根据 SQL 中另一列中特定 ID 的条件计算持续时间

查找每个项目的特定事件的总持续时间

如何通过R中的ID计算分类咒语的数量和持续时间

按因子和持续时间划分的面网格

Agg和groupby按特定条件

在特定条件下查找最新日期的记录以及其他相应值

如何在 SQL Server 中对按重叠时间分组的持续时间求和

计算多个行的持续时间并分组

将数据框与其他数据框合并并根据特定条件计算分组百分比

按特定条件在列表中查找对象

计算按列中项目分组的日期之间的持续时间

如何通过按其他多列分组来查找列中值的百分比?

SQL 计算查询开始时间和持续时间以查找结束时间

根据特定条件分组

在分组但不汇总的基础上,根据条件计算持续时间

有没有办法在R中使其他变量保持不变的同时拆分时间和持续时间变量?

持续时间的条件格式公式

用条件计算日期持续时间

按小时的开始和结束时间戳记定义持续时间

在python中通过timedelta的持续时间