2016-06-20 7 views
0

グループ化変数を特定の日付データに割り当てるには、関数を記述するか、cutを使用してください。たとえば、連続した日付に収集されたサンプルの共通のグループ化変数を作成したいとします。私はcutがここで働くと思っていましたが、cutは、それらが近くにあり、むしろシーケンスに基づいて一連のグループを作成するときに変数をグループ化しないと分かりました。日付が近いときの日付変数のグループ化

したがって、たとえば、このデータフレームを取る:私は右に行った範囲で残されることになる

df$cutVar <- cut(df$day, breaks= seq(0, 31, by = 1), right=TRUE) 

df <- structure(list(Num = c(0.888401849195361, 0.185766335576773, 
0.493163562379777, 0.13070688676089, 0.484760325402021, 0.603240836178884, 
0.893201333936304, 0.641203448642045, 0.16957180458121, 0.0101411847863346 
), Date = structure(c(10592, 10597, 10598, 10605, 10606, 10608, 
10609, 10616, 10617, 10618), class = "Date"), day = c(1L, 6L, 
7L, 14L, 15L, 17L, 18L, 25L, 26L, 27L)), .Names = c("Num", "Date", 
"day"), row.names = c(NA, -10L), class = "data.frame") 

た場合は、私はこのようにその使用法を理解してカット機能を適用することでした私は一緒にグループ化することを好む値を介して。たとえば、6番目と7番目のグループは、互いに近接してグループ化する必要があります。 14日と15日と同様に続きます。

> df 
      Num  Date day cutVar 
1 0.88840185 1999-01-01 1 (0,1] 
2 0.18576634 1999-01-06 6 (5,6] 
3 0.49316356 1999-01-07 7 (6,7] 
4 0.13070689 1999-01-14 14 (13,14] 
5 0.48476033 1999-01-15 15 (14,15] 
6 0.60324084 1999-01-17 17 (16,17] 
7 0.89320133 1999-01-18 18 (17,18] 
8 0.64120345 1999-01-25 25 (24,25] 
9 0.16957180 1999-01-26 26 (25,26] 
10 0.01014118 1999-01-27 27 (26,27] 

だからここに基本的な質問は、どのようにグループ(ユーザーによって定義された)に近い数字が要因の範囲で一緒にグループ化されているような連続変数(この場合は日付)にありますか?

+0

_consecutive_日付のグループの場合、おそらく 'rle'は非常に便利です。推移的な性質のため、私にとっては「親密さ」の他の定義は非常に迅速に問題になるでしょう。 – joran

+0

あなたが望む出力の例を貼り付けることができますか(または最後に 'df'がありますか)? 2つの隣接する行を組み合わせるだけですか?たとえば、1が2に近い場合、2が3に近い場合、... 19は20に近いですが、1は20に遠く離れていませんか?データは、変更されていない単一のセットに既に存在するか、または新しいデータが時間の経過とともに絶えず追加されますか? – gung

+0

@joran私はこれに完全に同意します。しかし、私の状況(例のデータが取り込めないかもしれない)では、これは問題ではありません。これは、過去のサンプリングデータで、誰かが1日か2日の間にデータを収集してから1か月間待ってから、同じことをしました。 'rle'の使い方を概説することは可能ですか? – boshek

答えて

1

これは何ですか? 3は、便宜上選択したしきい値です。

df$group <- cumsum(c(1, diff.Date(df$Date)) >= 3) 
df 
      Num  Date day group 
1 0.88840185 1999-01-01 1  0 
2 0.18576634 1999-01-06 6  1 
3 0.49316356 1999-01-07 7  1 
4 0.13070689 1999-01-14 14  2 
5 0.48476033 1999-01-15 15  2 
6 0.60324084 1999-01-17 17  2 
7 0.89320133 1999-01-18 18  2 
8 0.64120345 1999-01-25 25  3 
9 0.16957180 1999-01-26 26  3 
10 0.01014118 1999-01-27 27  3 
+0

私は一般的にそれを適用することができないのでここでの使用法を完全に理解していません。例えば、別の日付列( 'Date2')を追加し、それらの日付(' Group2')に基づいてグループ化を作成すると、それらの日付は1日だけで区切られます。 'df $ Date2 < - structure C(1118620800、1118620800、1118620800、1118707200、1118707200、 1118707200、1118707200、1118707200、1118707200、1118707200)、クラス= cで( "POSIXct"、 "POSIXt" )、TZONE = "UTC") ' 'のdf $ Group2 < - cumsum(c(1、diff.Date(df $ Date2))> = 1) 'となります。どのように私はこれを修正することができるかもしれないかについての任意の考えですか? – boshek

+0

しきい値が「1」に設定されているため、同じ日付のみをグループ化します。日差がある日付をグループ化する場合は、しきい値を1より大きく設定します。同様に、グループ内で2日間の差異も考慮されている場合は、しきい値を2以上に設定してください。 – Psidom

+0

もう1つの問題は、 'diff.Date'を適用する前に、' Date'カラムを 'Date'クラスに変換する必要があるということです'diff.Date'は秒の代わりにDateの差を返します。 'df $ Date2 < - as.Date(df $ Date2)'です。 – Psidom

関連する問題