2017-11-02 4 views
1

私はちょうどRを学び始めたばかりで、従業員の利用状況を計算している仕事上の問題を助けてくれるかどうかを確認しようとしています。不規則な時間 - 開始時刻と終了時刻を基準にしたユニークな分を計算する

私は毎日各従業員の労働時間を計算しようとしていますが、その日分の合計時間を分けています。私が与えられた唯一のデータは従業員と労働の開始時間と終了時間であるため、計時された合計時間は簡単に取得できますが、労働は手間がかかります。私は何分を働かせていないことを私が確かめることができるかと悩んでいる。

下記のダミーデータをまとめました。彼らが計時した合計時間を合計すると、の何かがになります。一度に複数のものに時計を付けるので、やりがいがあり、必ずしも同時にすべてを止めるわけではありません。だから、あなたは削除する必要がある重複の多くで終わる。

私はHANA/SQLでこれと取り組んでいます。私は醜い取引をしてしまいました。ここでは、1分ごとに記録を残したテーブルを作成し、そこから集計して集計しましたが、3日目のシフト・フォークをいくつか問題が発生しました。

Rと一緒にできることがあれば、助けになるかもしれないと思います。明確にするために

Employee Start     Stop 
Eddie  8/21/2017 6:57:00 AM 8/21/2017 10:45:00 AM 
Eddie  8/21/2017 6:57:00 AM 8/21/2017 10:57:00 AM 
Eddie  8/21/2017 6:57:00 AM 8/21/2017 11:27:00 AM 
Eddie  8/21/2017 11:58:00 AM 8/21/2017 12:57:00 PM 
Joe   8/21/2017 5:38:00 AM 8/21/2017 7:00:00 AM 
Joe   8/21/2017 5:38:00 AM 8/21/2017 7:00:00 AM 
Joe   8/21/2017 7:46:00 AM 8/21/2017 9:11:00 AM 
Joe   8/21/2017 7:46:00 AM 8/21/2017 9:12:00 AM 
Joe   8/21/2017 9:52:00 AM 8/21/2017 12:35:00 PM 
Joe   8/21/2017 9:52:00 AM 8/21/2017 12:40:00 PM 
Joe   8/21/2017 11:46:00 AM 8/21/2017 1:46:00 PM 

、私がいる問題は、その日の仕事を合計し、従業員がそれを壊していない、問題は、彼らが時間をオーバーラップする複数の行を持つインスタンスです。私は1日の1分が1回だけカウントされるようにしたい。

例のエディでは、彼は4つのレコードを持っていますが、これらのうち3つは重なっています。私が必要とするのは論理的に言うと、エディは午前6時57分から午前11時27分まで何かに刻まれています。それらの2つの時間の間の分をカウントし、重なりのない最後のクロッキングを取ります(11:58 AMから12:57まで)。うまくいけばそれは理にかなっている。これは私が前に戦うことがなかった奇妙な時間の問題です。あなたがdifftimeと期間を計算し、正しい単位に変換する必要があり

ライブラリ(dplyr)

dt %>% 
    group_by(Employee) %>% 
    summarize(totalDuration = sum(duration)) 

dplyrパッケージを使用して

dt[['duration']] <- as.numeric(difftime(dt$Stop, dt$Start), units = 'mins') 
splitDt <- split(dt$duration, dt$Employee) 
sapply(splitDt, sum) 

:基本Rを使用して

答えて

0

。次に、従業員ごとにデータをグループ化または分割することができます。

splitDt <- split(dt, dt$Employee) 
seqMin <- mapply(seq, dt$Start, dt$Stop, by = 'min', SIMPLIFY = FALSE) 
sapply(unique(dt$Employee), function(employee) { 
    i <- grep(employee, dt$Employee) 
    length(unique(unlist(seqMin[i]))) 
}) 

は分のシーケンスを作成し、一緒にすべての分を結合:カウント分かけて次の操作を行うことができないように

。異なる時間間隔を数えることは、所望の出力を提供する。

+0

ありがとうございました!私が持っている問題は、私が答えを得るために期間を要約することができないということです。私がそのように要約すると、時間が重複する可能性があるので、より多くの分で終わります。私は時計のすべての実際の "分"が1回だけカウントされることを保証する必要があります。私は元の投稿を編集したので、最初は十分分かりませんでした。ヘルプをよろしくお願いいたします。 – Jon

+0

私は上記の私の答えを更新しました – troh

関連する問題