C
State State.Start State.End State.Duration
1 UDT/Maintenance delay 01.02.2015 08:00:00 01.02.2015 08:10:00 600
2 UDT/Maintenance delay 01.02.2015 08:10:00 01.02.2015 08:40:00 1800
9 No material 01.02.2015 08:20:00 01.02.2015 08:40:00 1200
29 UDT/Maintenance delay 01.02.2015 14:00:00 01.02.2015 14:45:00 2700
35 No material 01.02.2015 16:00:00 01.02.2015 17:40:00 6000
45 No material 01.02.2015 17:30:00 01.02.2015 17:40:00 600
72 No material 01.02.2015 21:01:00 01.02.2015 23:30:00 8940
81 No material 01.02.2015 22:00:00 02.02.2015 01:38:00 13080
88 ENG/Engineering 01.02.2015 23:30:00 02.02.2015 01:11:00 6060
93 SDT/Maintenance delay 02.02.2015 02:30:00 02.02.2015 04:25:00 6900
95 ENG/Engineering 02.02.2015 04:25:00 02.02.2015 04:25:00 0
以上数据由机器提供 我想执行子集化操作
Delay_Time <- subset(C, State == "No material")
我的输出是
Delay_Time
State State.Start State.End State.Duration
9 No material 01.02.2015 08:20:00 01.02.2015 08:40:00 1200
35 No material 01.02.2015 16:00:00 01.02.2015 17:40:00 6000
45 No material 01.02.2015 17:30:00 01.02.2015 17:40:00 600
72 No material 01.02.2015 21:01:00 01.02.2015 23:30:00 8940
81 No material 01.02.2015 22:00:00 02.02.2015 01:38:00 13080
如果您在上面的Delay_time子集中看到了
第二行的时间段是16:00:00到17:40:00
第三排的时间段为17:30:00至17:40:00
第三行时间已经是第二行的一部分(已预订)
在我的子集中,我不想让这些第三行像案件一样
是否可以通过避免第三行等情况来进行子集化。?
答案 0 :(得分:2)
这是使用data.table
包
library(data.table)
unique(setDT(C)[State == "No material"], by = "State.End")
# State State.Start State.End State.Duration
# 1: No material 01.02.2015 08:20:00 01.02.2015 08:40:00 1200
# 2: No material 01.02.2015 16:00:00 01.02.2015 17:40:00 6000
# 3: No material 01.02.2015 21:01:00 01.02.2015 23:30:00 8940
# 4: No material 01.02.2015 22:00:00 02.02.2015 01:38:00 13080
使用dplyr
library(dplyr)
C %>%
filter(State == "No material") %>%
distinct(State.End)
# State State.Start State.End State.Duration
# 1 No material 01.02.2015 08:20:00 01.02.2015 08:40:00 1200
# 2 No material 01.02.2015 16:00:00 01.02.2015 17:40:00 6000
# 3 No material 01.02.2015 21:01:00 01.02.2015 23:30:00 8940
# 4 No material 01.02.2015 22:00:00 02.02.2015 01:38:00 13080
答案 1 :(得分:1)
抱歉,我不习惯使用subset()
功能。您可以使用[]
找到解决方案。
s_e_aux <- C$State.End[C$State!="No material"]
Delay_Time <- C[C$State=="No material" & !C$State.End%in%s.e.aux,]