2017-02-07 4 views
1

私はRを初めて使用しており、立ち寄りました。フラグ= 1の開始時刻と終了時刻を取得します。条件は、1が(連続的に)少なくとも4回繰り返されなければならず、開始時間と終了時間だけが取り込まれる必要があるということです。私の入力はフラグ= 1の開始時刻と終了時刻を4回繰り返した場合(forループを使用しない場合)

Time Stamp Flag 00:00:00 1 00:00:10 1 00:00:20 1 00:00:30 1 00:00:40 0 00:00:50 0 00:01:00 0 00:01:10 0 00:01:20 0 00:01:30 1 00:01:40 1 00:01:50 1 00:02:00 0 00:02:10 1 00:02:20 1 00:02:30 1 00:02:40 1 00:02:50 1 00:03:00 1 00:03:10 1 00:03:20 1

like-見て、私の出力は次のようになります - 私は、forループや他の場合には使用してそれを達成しているが、データががたくさん取って巨大であるよう

Start Time End Time Duration 00:00:00 00:00:30 00:00:30 00:02:10 00:03:20 00:01:10

時間の。だから、私はそれを最適化する必要があります。

Rには、変更して使用できるinbuilt関数はありますか?

答えて

0

まず使用してデータを作成します。結果は

# A tibble: 2 × 4 
    gr   start.time   last.time Duration 
    <int>    <dttm>    <dttm> <time> 
1  0 2017-06-08 00:00:00 2017-06-08 00:00:30 30 secs 
2  4 2017-06-08 00:02:10 2017-06-08 00:03:20 70 secs 
ある

st %>% 
mutate(gr = cumsum(lag(Flag, default = Flag[1]) != Flag)) %>% 
filter(Flag == 1) %>% 
group_by(gr) %>% 
filter(length(gr) >= 4) %>% 
summarise(start.time = first(Time), 
      last.time = last(Time)) %>% 
mutate(Duration = last.time - start.time) 

st <- data.frame(Time = format(seq(from=as.POSIXct("2012-1-1 00:00:00", tz="UTC"), 
            to=as.POSIXct("2012-1-1 00:03:20", tz="UTC"), 
           by="10 secs") , "%H:%M:%S"), 
       Flag = c(1,1,1,1,0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1)) 

st$Time <- as.POSIXct(st$Time, format = "%H:%M:%S") 

dplyrを使用して、私はこのように近づくだろう

関連する問題