如何基于R中的时间分配数据帧组

时间:2018-08-14 08:54:59

标签: r dplyr

你好,我有一个像这样的表:

{{1}}

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

所以这将是预期的结果,如下所示:

{{1}}

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

1 个答案:

答案 0 :(得分:2)

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)