首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据R中的时间分配数据帧分组

如何根据R中的时间分配数据帧分组
EN

Stack Overflow用户
提问于 2018-08-14 16:54:59
回答 1查看 65关注 0票数 2

您好,我有一个这样的表:

代码语言:javascript
运行
复制
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,可以从数据帧中过滤出来?

因此,这将是预期的结果,数据帧如下所示:

代码语言:javascript
运行
复制
Entry  TimeOn TimeOff Alarm 
  1     60     70      355
  2     80     85      455
  3     100    150     400
  7     160    170     850

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-14 18:43:21

代码语言:javascript
运行
复制
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建议

代码语言:javascript
运行
复制
df[apply(df, 1, function(x) { nrow( df[between(x[['TimeOn']],df$TimeOn,df$TimeOff),] ) > 1 }),]

数据

代码语言:javascript
运行
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51837486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档