2016-05-23 6 views
0

私は働いている機能がありますが、これについてもっと簡単な方法があることを期待しています。週に1時間のデータを効率的かつ簡潔にRに変換

私は、発生した週の時刻でキャプチャされたイベントのデータセットを持っています。たとえば、日曜日の午前4時=月曜日の午前4時= 28時などです。このデータを毎日分析したい基礎。たとえば、8時から10時の間に発生するすべてのイベントは、任意の日に発生します。

これを行うには、順序付きリストの指定された範囲に対して2分の1の値を返す関数を作成しました。関数two_breakは、週の時間を表す0:168と24時間の希望期間の範囲(b1とb2)の間の整数の順序付きリストを受け入れます。 b1とb2は、希望する24時間の範囲を分割します。つまり、b1 = 8、b2 = 10の場合、two_breakは9、(9 + 24)= 33、(9 + 48)= 57などのすべての値を返します。 1および他のすべて0

two_break <- function(test_hr,b1,b2){ 

    test_hr<-ifelse(test_hr==1,1.1,test_hr) 
    for(i in 0:6){ 
    test_hr<-ifelse(test_hr> (b1+24*i) & test_hr< (b2+24*i), 1 ,test_hr) 
    } 
    test_hr<-ifelse(test_hr==1,1,0) 
    return(test_hr) 
} 

としてこの機能が正常に動作しますが、そこに誰が/簡潔に、より効率的にそれを行うことができれば、私は思ったんだけど。

私のgithub:anthonyjp87 168時間変換ファイル/データで完全なコードとデータセットを参照してください。

乾杯!

答えて

1

あなたは一日中時間をキャプチャする%%、曜日、およびモジュラスをキャプチャするために、整数の除算%/%を使用することができます:あなたがラップしたい場合は真夜中を0で表現されていることを

weekHours <- 1:168 

# return the indices of all elements where the hour is between 8AM and 10AM, inclusive 
test_hr <- weekHours[weekHours %% 24 %in% 8:10] 

注意をこの関数に、あなたは曜日を取得するには

getTest_hr <- function(weekHours, startTime, stopTime) { 
        weekHours[weekHours %% 24 %in% seq(startTime, stopTime)] 
       } 

を使用する場合があります、あなたは整数の除算を使用することができます。

# get all indices for the third day of the week 
dayOfWeek3 <- weekHours[(weekHours %/% 24 + 1) == 3] 

単に指標のうち、論理を引き出し、選択した期間のバイナリーベクターを得るために:

allTimesBinary <- (weekHours %% 24) %in% 8:10  
+0

これは素晴らしいです!しかし、私はまた、順序付きリストを探しています - どのようなヒントは、順序リストとしてtest_hrを保持し、一致しない値を '0'にしますか? – anthonyjp87

+0

明確にするために、バイナリ変数が必要ですか?週の時間がテスト設定の場合は1秒、設定されていない場合は0秒です。 – lmo

+0

はい、これは私が作成しようとしているものです – anthonyjp87

関連する問題