R の時間データをさまざまな解像度 (分、時、秒など) でプロットします。
-
12-09-2019 - |
質問
CSV には次のようなデータがあります。
"Timestamp", "Count"
"2009-07-20 16:30:45", 10
"2009-07-20 16:30:45", 15
"2009-07-20 16:30:46", 8
"2009-07-20 16:30:46", 6
"2009-07-20 16:30:46", 8
"2009-07-20 16:30:47", 20
read.cvs を使用して R に読み込むことができます。プロットしたいのですが:
- 1 秒あたりのエントリ数は次のようになります。
"2009-07-20 16:30:45", 2 "2009-07-20 16:30:46", 3 "2009-07-20 16:30:47", 1
- 1秒あたりの平均値:
"2009-07-20 16:30:45", 12.5 "2009-07-20 16:30:46", 7.333 "2009-07-20 16:30:47", 20
- 1 と 2 と同じですが、分単位、次に時間単位です。
Rでこれを行う方法(秒/分/などで収集し、プロットする)はありますか?
解決
あなたのデータを読み、のの動物園に変換A>オブジェクトます:
R> X <- read.csv("/tmp/so.csv")
R> X <- zoo(X$Count, order.by=as.POSIXct(as.character(X[,1])))
これがために非ユニークなタイムスタンプの警告が表示されることに注意してください。
カウントするaggregate
でlength
を使用してタスク1:
R> aggregate(X, force, length)
2009-07-20 16:30:45 2009-07-20 16:30:46 2009-07-20 16:30:47
2 3 1
タスク2 aggregate
を使用します:
R> aggregate(X, force, mean)
2009-07-20 16:30:45 2009-07-20 16:30:46 2009-07-20 16:30:47
12.500 7.333 20.000
タスク3は、上位インデックスまで集約して同じように行うことができます。これは、集計の結果にplot
を呼び出すことができます:
plot(aggregate(X, force, mean))
他のヒント
のデータを平均化することplyrパッケージで簡単に行えます。
library(plyr)
Second <- ddply(dataset, "Timestamp", function(x){
c(Average = mean(x$Count), N = nrow(x))
})
分または時間単位で同じことを行うには、あなたはその情報にフィールドを追加する必要があります。
library(chron)
dataset$Minute <- minutes(dataset$Timestamp)
dataset$Hour <- hours(dataset$Timestamp)
dataset$Day <- dates(dataset$Timestamp)
#aggregate by hour
Hour <- ddply(dataset, c("Day", "Hour"), function(x){
c(Average = mean(x$Count), N = nrow(x))
})
#aggregate by minute
Minute <- ddply(dataset, c("Day", "Hour", "Minute"), function(x){
c(Average = mean(x$Count), N = nrow(x))
})
所属していません StackOverflow