9

次のような 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. 1 秒あたりのエントリ数。
    "2009-07-20 16:30:45"、2
    "2009-07-20 16:30:46"、3
    "2009-07-20 16:30:47"、1
    
  2. 1 秒あたりの平均値:
    "2009-07-20 16:30:45"、12.5
    "2009-07-20 16:30:46"、7.333
    "2009-07-20 16:30:47", 20
    
  3. 1 & 2 と同じですが、次に分単位、次に時間単位です。

Rでこれを行う方法はありますか(秒/分/などで収集&プロット)?

4

2 に答える 2

7

データを読み取り、それを動物園オブジェクトに変換します。

R> X <- read.csv("/tmp/so.csv")
R> X <- zoo(X$Count, order.by=as.POSIXct(as.character(X[,1])))

タイムスタンプが一意でないため、これにより警告が表示されることに注意してください。

カウントするためにaggregatewithを使用するタスク1 :length

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))
于 2009-08-10T18:50:39.813 に答える
2

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))
})
于 2009-08-10T18:51:22.337 に答える