R 根据开始时间过滤一个表中的时间戳行&;另一个表中给出了结束时间
我有一个包含停机数据的表,如下所示R 根据开始时间过滤一个表中的时间戳行&;另一个表中给出了结束时间,r,dplyr,R,Dplyr,我有一个包含停机数据的表,如下所示 | Machine No | Start Time | End Time | |------------|------------------|------------------| | H18 | 01-01-2021 12:05 | 01-01-2021 12:15 | | H19 | 02-01-2021 11:15 | 02-01-2021 13:15 | | H20 | 01-01
| Machine No | Start Time | End Time |
|------------|------------------|------------------|
| H18 | 01-01-2021 12:05 | 01-01-2021 12:15 |
| H19 | 02-01-2021 11:15 | 02-01-2021 13:15 |
| H20 | 01-01-2021 11:15 | 01-01-2021 13:15 |
| H21 | 02-01-2021 09:15 | 02-01-2021 13:55 |
| H22 | 02-01-2021 10:25 | 02-01-2021 10:35 |
我有一个看起来像这样的价值流数据,它基本上是附加在所有机器上的
| Machine No | timestamp | Value |
|------------|------------------|-------|
| H18 | 01-01-2021 12:00 | 34 |
| H18 | 01-01-2021 12:01 | 74 |
| H18 | 01-01-2021 12:02 | 43 |
| H18 | 01-01-2021 12:03 | 60 |
| H18 | 01-01-2021 12:04 | 68 |
| H18 | 01-01-2021 12:05 | 17 |
| H18 | 01-01-2021 12:06 | 38 |
| H18 | 01-01-2021 12:07 | 91 |
| H18 | 01-01-2021 12:08 | 65 |
| H18 | 01-01-2021 12:09 | 80 |
| H18 | 01-01-2021 12:10 | 67 |
| H18 | 01-01-2021 12:11 | 78 |
| H18 | 01-01-2021 12:12 | 43 |
| H18 | 01-01-2021 12:13 | 53 |
| H18 | 01-01-2021 12:14 | 92 |
| H18 | 01-01-2021 12:15 | 11 |
| H18 | 01-01-2021 12:16 | 75 |
| H18 | 01-01-2021 12:17 | 61 |
| H18 | 01-01-2021 12:18 | 82 |
| H18 | 01-01-2021 12:19 | 50 |
| H18 | 01-01-2021 12:20 | 65 |
| H18 | 01-01-2021 12:21 | 23 |
| H18 | 01-01-2021 12:22 | 80 |
| H18 | 01-01-2021 12:23 | 55 |
| H18 | 01-01-2021 12:24 | 61 |
| H18 | 01-01-2021 12:25 | 11 |
| H18 | 01-01-2021 12:26 | 98 |
我想从价值流表中删除包含数据的行,这些数据位于停机数据表中提到的开始时间和结束时间之间。如何在R中实现这一点?您可以通过
机器加入df1
和df2
。否
,将列转换为POSIXct
格式,并仅保留开始时间
和结束时间
之外的行
library(dplyr)
df1 %>%
inner_join(df2, by = 'Machine.No') %>%
mutate(across(c(Start.Time, End.Time,timestamp), lubridate::dmy_hm)) %>%
filter(!(timestamp >= Start.Time & timestamp <= End.Time))
库(dplyr)
df1%>%
内部联接(df2,by='Machine.No')%>%
突变(跨越(c(开始时间、结束时间、时间戳),lubridate::dmy_hm))%>%
过滤器(!(timestamp>=Start.Time×tamp Hi Ronak,我不认为这是有效的,因为它正在做的是,当通过内部联接合并时,Valuestream中的1 LAC行和停机时间中的10k行被复制到大约29 LAC。我们的目标是简单地删除停机时间表中提到的每台机器的停机时间范围内的值流数据t如果df1
有重复的机器编号,则可能发生这种情况。在本例中,每个机器编号只有一行。执行df1%>%count(Machine.No,sort=TRUE)%%>%head
res <- merge(df1, df2, by = 'Machine.No')
res[2:4] <- lapply(res[2:4], as.POSIXct, format = '%d-%m-%Y %H:%M', tz = 'UTC')
subset(res, !(timestamp >= Start.Time & timestamp <= End.Time))