2017-04-12 11 views
1

MY DATASETは継続時間を分単位で計算する方法は?

私のデータセットは、週(Day)の様々な日に異なる領域(Location)で働く多くの人々(ID)の開始時刻と終了時刻を含んでいます。私のデータセットの例は以下の通りです:

> head(WeekOne, 15) 
       Start    Finish Day  ID Location 
1 2017-04-12 00:00:00 2017-04-12 00:02:55 D1 Daniel Office 
2 2017-04-12 00:02:55 2017-04-12 00:06:18 D1 Daniel Office 
3 2017-04-12 00:06:18 2017-04-12 00:08:20 D1 Daniel OnSite 
4 2017-04-12 00:08:20 2017-04-12 00:08:40 D1 Daniel OnSite 
5 2017-04-12 00:08:40 2017-04-12 00:10:11 D1 Daniel Travel 
6 2017-04-12 00:10:11 2017-04-12 00:10:18 D1 Daniel Travel 
7 2017-04-12 00:10:18 2017-04-12 00:17:52 D1 Daniel Travel 
8 2017-04-12 00:17:52 2017-04-12 00:19:00 D1 Daniel Travel 
9 2017-04-12 00:19:00 2017-04-12 00:19:56 D1 Daniel OnSite 
10 2017-04-12 00:19:56 2017-04-12 00:28:48 D1 Daniel OnSite 
11 2017-04-12 00:00:00 2017-04-12 00:03:52 D2 Daniel OnSite 
12 2017-04-12 00:03:52 2017-04-12 00:04:05 D2 Daniel Office 
13 2017-04-12 00:04:05 2017-04-12 00:08:32 D2 Daniel Office 
14 2017-04-12 00:08:32 2017-04-12 00:16:01 D2 Daniel Travel 
15 2017-04-12 00:16:01 2017-04-12 00:25:35 D2 Daniel OnSite 

私は数分で、各IDは週にわたり各Locationに費やし、合計時間を知りたいです。 Dayの最大レベルはD7で、毎週別のdata.frameがあります。したがって、私はLocationIDを反復するだけです。これは奇妙な書式で分を返し、1日に同じ場所に複数の訪問を考慮していませんが、私は、

以下のコードを試みたWHAT

。たとえば、DanielはD1に2回、OnSiteを2回訪問します。

WeekOne %>% 
    group_by(ID, Location) %>% 
    summarise(Duration = max(Finish) - min(Start)) 

私は複数とLocationの変化を考慮し、新しい列WeekOne$Levelを作成するのだと思いました。その後、各レベルで繰り返し、上記のコードを使用できます。たとえば:

> head(WeekOne, 15) 
       Start    Finish Day  ID Location Level 
1 2017-04-12 00:00:00 2017-04-12 00:02:55 D1 Daniel Office 1 
2 2017-04-12 00:02:55 2017-04-12 00:06:18 D1 Daniel Office 1 
3 2017-04-12 00:06:18 2017-04-12 00:08:20 D1 Daniel OnSite 2 
4 2017-04-12 00:08:20 2017-04-12 00:08:40 D1 Daniel OnSite 2 
5 2017-04-12 00:08:40 2017-04-12 00:10:11 D1 Daniel Travel 3 
6 2017-04-12 00:10:11 2017-04-12 00:10:18 D1 Daniel Travel 3 
7 2017-04-12 00:10:18 2017-04-12 00:17:52 D1 Daniel Travel 3 
8 2017-04-12 00:17:52 2017-04-12 00:19:00 D1 Daniel Travel 3 
9 2017-04-12 00:19:00 2017-04-12 00:19:56 D1 Daniel OnSite 4 
10 2017-04-12 00:19:56 2017-04-12 00:28:48 D1 Daniel OnSite 4 
11 2017-04-12 00:00:00 2017-04-12 00:03:52 D2 Daniel OnSite 5 
12 2017-04-12 00:03:52 2017-04-12 00:04:05 D2 Daniel Office 6 
13 2017-04-12 00:04:05 2017-04-12 00:08:32 D2 Daniel Office 6 
14 2017-04-12 00:08:32 2017-04-12 00:16:01 D2 Daniel Travel 7 
15 2017-04-12 00:16:01 2017-04-12 00:25:35 D2 Daniel OnSite 8 

WeekOne %>% 
    group_by(ID, Level) %>% 
    summarise(Duration = max(Finish) - min(Start)) 

は、しかし、私もそれがLocationを考慮していない、この列を追加する方法がわからないよ、面倒なようで、面白い形式で返す分で問題に対処しません。

私の質問

どのように迅速かつ簡単に時間をかけて各IDによってLocationの合計時間を計算することができますか?期間は分単位で、分単位で四捨五入してください。たとえば、3分です。

答えて

1
あなたが最初の期間を計算して、IDと場所によって合計を取得したい

WeekOne %>% 
     mutate(Duration = Finish - Start) %>% 
     group_by(ID, Location) %>% 
     summarize(Total_Duration = round(sum(Duration)/60, 1)) 
+0

この 'Total_Duration'の形式は何ですか?例えば、私は933.50000238419という番号が与えられていますが、 'Total_Duration'はどのようにして数分で取得できますか? – user2716568

+0

あなたは秒のatmのように見えるので、分で60分に分けてください –

関連する問題