r - 如何在R中根据时间分配数据帧组

标签 r dplyr

你好,我有一张像这样的 table :

Entry  TimeOn TimeOff Alarm 
  1     60     70      355
  2     80     85      455
  3     100    150     400
  4     105    120     320 
  5     125    130     254
  6     135    155     220
  7     160    170     850

我想了解如何对这些条目进行分组,以便可以从数据帧中过滤出在另一个警报期间开始并在另一个警报期间或在其他警报之后结束的条目(例如条目 4,5 和 6)?

所以这将是所需的结果,数据框如下所示:

Entry  TimeOn TimeOff Alarm 
  1     60     70      355
  2     80     85      455
  3     100    150     400
  7     160    170     850

因此条目 4、5 和 6 被删除

最佳答案

library(dplyr)
library(data.table)
df$flag <- apply(df, 1, function(x) {
                 nrow(filter(df, data.table::between(x['TimeOn'],df$TimeOn,df$TimeOff)))
                 })

df[df$flag > 1, ]
  Entry TimeOn TimeOff Alarm flag
4     4    105     120   320    2
5     5    125     130   254    2
6     6    135     155   220    2

#Save option using Base R
df$flag <- apply(df,1,function(x) {nrow(df[x['TimeOn'] >= df$TimeOn & x['TimeOn'] <= df$TimeOff,])})

由@Andre Elrico 建议

df[apply(df, 1, function(x) { nrow( df[between(x[['TimeOn']],df$TimeOn,df$TimeOff),] ) > 1 }),]

数据

df <- read.table(text="
         Entry  TimeOn TimeOff Alarm
             1     60     70      355
             2     80     85      455
             3     100    150     400
             4     105    120     320
             5     125    130     254
             6     135    155     220
             7     160    170     850
             ",header=T)

关于r - 如何在R中根据时间分配数据帧组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51837486/

相关文章:

r - 从绘图的 bin 生成汇总表

r - 在 r 中按时间分组的累积计数

r - 检查一个时间间隔内的任何日期是否在另一个时间间隔内的任何日期内

r - dplyr:通过正则表达式重命名多个列

rquery:连接到 Postgres DB 中的特定模式

r - 避免在 dplyr 非标准评估中重复取消引用

使用 dplyr 包 reshape 数据

r - 使用 ggplot2 和 dplyr 编程

R 水平条形图,轴标签在两个轴之间拆分

使用降雪和 sfLapply 在 R 中栅格化多边形