2016-11-21 5 views
0

時系列データの異常検出には手間がかかります。私は異常検出のコードを持っていますが、データの準備をしようとしています。データは以下の通りです。異常検出のためのデータの準備

timestampUtc 

2016-08-01 14:38:01, 2016-08-01 14:38:06, 2016-08-01 14:38:12, 2016-08-01 14:38:18, 2016-08-01 14:38:22, 2016-08-01 14:38:27, 2016-08-01 14:38:27, 2016-08-01 14:38:30, 2016-08-01 14:38:37, 2016-08-01 14:38:38, 2016-08-01 14:38:38, 2016-08-01 14:38:46, 2016-08-01 14:39:03, 2016-08-01 14:39:03, 2016-08-01 14:39:10, 2016-08-01 14:39:12, 2016-08-01 14:39:15, 2016-08-01 14:39:16, 2016-08-01 14:39:20, 2016-08-01 14:39:28 

最初に、timestampUtcの欄に秒をゼロにしたいとします。次に、countという列を作成し、その特定の分の値の数を数えたいと思います。たとえば、出力は次のようになります。

timestampUtc count 

2016-08-01 14:38:00 12, 2016-08-01 14:39:00 6, 2016-08-01 14:40:00 8 

答えて

1

あなたが要約するtableを使用し、その後、秒を無視するように、いくつかの形式を使用して、日付に文字列を変換するためにas.POSIXct()を使用することができます。

timestampUtc <- c('2016-08-01 14:38:01', '2016-08-01 14:38:06', '2016-08-01 14:38:12', '2016-08-01 14:38:18', '2016-08-01 14:38:22', '2016-08-01 14:38:27', '2016-08-01 14:38:27', '2016-08-01 14:38:30', '2016-08-01 14:38:37', '2016-08-01 14:38:38', '2016-08-01 14:38:38', '2016-08-01 14:38:46', '2016-08-01 14:39:03', '2016-08-01 14:39:03', '2016-08-01 14:39:10', '2016-08-01 14:39:12', '2016-08-01 14:39:15', '2016-08-01 14:39:16', '2016-08-01 14:39:20', '2016-08-01 14:39:28') 
timestampUtc <- as.POSIXct(timestampUtc, format="%Y-%m-%d %H:%M", tz="UTC") 
table(timestampUtc) 
2016-08-01 14:38:00 2016-08-01 14:39:00 
       12     8 
1

いるあなたと仮定すると、タイムスタンプはPOSIXt形式で既にある、そして、あなたのタイムスタンプデータは、DF-

df$count <- 1 
df$timestamp <- format(df$timestamp, format = "%Y-%m-%d %H:%M") 
df <- aggregate(count ~ timestamp, data = df, FUN = sum) 
names(df) <- c("timestamp", "count") 
+0

私はあなたがちょうど使用した場合、あなたの束の合計を避けることができたと思う: 'df < - aggregate(count〜timestamp、data = df、FUN = length)' –

1

cutと0123の両方に保存されていますPOSIXtクラスのの方法はbreaks(またはby)のための間隔オプションを持っている:

timestampUtc <-scan(text="2016-08-01 14:38:01, 2016-08-01 14:38:06, 2016-08-01 14:38:12, 2016-08-01 14:38:18, 2016-08-01 14:38:22, 2016-08-01 14:38:27, 2016-08-01 14:38:27, 2016-08-01 14:38:30, 2016-08-01 14:38:37, 2016-08-01 14:38:38, 2016-08-01 14:38:38, 2016-08-01 14:38:46, 2016-08-01 14:39:03, 2016-08-01 14:39:03, 2016-08-01 14:39:10, 2016-08-01 14:39:12, 2016-08-01 14:39:15, 2016-08-01 14:39:16, 2016-08-01 14:39:20, 2016-08-01 14:39:28", 
         what="", sep=",") 
#Read 20 items 

table(cut(as.POSIXct(timestampUtc), breaks="min") ) 
#------------ 
2016-08-01 14:38:00 2016-08-01 14:39:00 
       12     8 

あなたは10のまたは15分間隔を望んでいた、それは「10分」または「15分」だったかもしれません。これまでの回答の1つは、入力段階で情報が削除されていましたが、疑わしい習慣であると考えられていますが、tableに渡す段階で、code_is_entropyは短縮形式の文字列でformatを使用しました。

関連する問題