Read Box ID Time
T out 10/1/2019 9:00:01 AM
T out 10/1/2019 9:00:02 AM
T out 10/1/2019 9:00:03 AM
T out 10/1/2019 9:02:59 AM
T out 10/1/2019 9:03:00 AM
F 10/1/2019 9:05:00 AM
T out 10/1/2019 9:06:00 AM
T out 10/1/2019 9:06:02 AM
T in 10/1/2019 9:07:00 AM
T in 10/1/2019 9:07:02 AM
T out 10/1/2019 9:07:04 AM
T out 10/1/2019 9:07:05 AM
T out 10/1/2019 9:07:06 AM
hello 10/1/2019 9:07:08 AM
基于此数据集中的某些条件,我想创建startime列和endtime列。
当发生以下情况时,我想创建一个“starttime”:Read==“T”,Box==“out”,ID=>”
当此条件的第一个实例发生时,将生成starttime。例如,对于这个数据集,starttime将是10/1/2019 9:00:01 AM,因为这是我们首先看到所需条件的地方(Read=T,Box=out,ID=)
然而,当这些条件中的任何一个都不真实时,将创建结束时间。因此,第一个结束时间正好在第6行之前,时间是2019年10月1日上午9:03:00。我的最终目标是为此创建一个持续时间列。
这是我想要的输出:
starttime endtime duration
10/01/2019 9:00:01 AM 10/01/2019 9:03:00 AM 179 secs
10/1/2019 9:06:00 AM 10/1/2019 9:06:02 AM 2 secs
10/1/2019 9:07:04 AM 10/1/2019 9:07:06 AM 2 secs
structure(list(Read = structure(c(3L, 3L, 3L, 3L, 3L, 2L, 3L,
3L, 3L, 3L, 4L, 4L, 3L, 1L), .Label = c("", "F", "T", "T "), class = "factor"),
Box = structure(c(3L, 3L, 3L, 3L, 3L, 1L, 3L, 3L, 2L, 2L,
3L, 3L, 3L, 1L), .Label = c("", "in", "out"), class = "factor"),
ID = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 2L), .Label = c("", "hello"), class = "factor"),
Time = structure(1:14, .Label = c("10/1/2019 9:00:01 AM",
"10/1/2019 9:00:02 AM", "10/1/2019 9:00:03 AM", "10/1/2019 9:02:59 AM",
"10/1/2019 9:03:00 AM", "10/1/2019 9:05:00 AM", "10/1/2019 9:06:00 AM",
"10/1/2019 9:06:02 AM", "10/1/2019 9:07:00 AM", "10/1/2019 9:07:02 AM",
"10/1/2019 9:07:04 AM", "10/1/2019 9:07:05 AM", "10/1/2019 9:07:06 AM",
"10/1/2019 9:07:08 AM"), class = "factor")), class = "data.frame", row.names = c(NA,
-14L))
我认为总的来说,我必须创建一个循环。我相信我的思维过程是正确的,只是不确定如何制定代码。这就是我要尝试的:
df2 <- mutate(df,
Date = lubridate::mdy_hms(Date))
for ( i in 2:nrow(df2))
{
if(df2$Read[[i]] == 'T')
}
我认为这可能是一个开始(只是把我的条件放在循环中,我不知道如何完成这个)