2012-04-17 12 views
1

同じエントリを持つ別の列の対応するエントリを持つ列のいくつかのエントリの平均をとるにはどうすればよいですか?Rテーブルの変更

たとえば、私は3列、時間と価格が2である大きなテーブルを持っています。そして、時間列の下で値が繰り返されると言うことができます。 10時30分のように4回表示され、私は対応する価格の列のエントリの平均を取る必要がありますと10時30分の単一の行にそれを要約する単一の価格で。誰かが私にいくつかの洞察を教えてくれますか

サンプルデータ:

time  prices  size 
10:00  23  1 
10:15  12  3 
10:30  12  1 
10:30  19  4 
10:45  12  1 

I価格を平均化する、単一の行にマージ行3及び4を変更したいと思います。

答えて

3

どのように多くの全体像については

tapply(prices, time, mean) 

のようなものについて、?tapply

を参照してくださいしかし、あなたが列sizeをどうしたいですか?

EDIT:

myDF<-data.frame(time=c("10:00","10:15","10:30","10:30","10:45"), 
    prices=c(23,12,12,19,12),size=c(1,3,1,4,1)) 

theRows <- tapply(seq_len(nrow(myDF)), myDF$time, function(x) { 
    return(data.frame(time = head(myDF[x, "time"],1), prices = mean(myDF[x, "prices"]), 
    size = tail(myDF[x, "size"], 1))) 
    } 
) 

Reduce(function(...) rbind(..., deparse.level = FALSE), theRows) 

P.S.:

価格の平均と大きさの最後の値を取るために、ここで1つの提案ですこれは、ddplyを使って非常にうまくいくでしょう - Paulの答えも見てください!

+0

大変ありがとうございます。サイズ欄には、最後の入力を検討したいと思います。私はこの場合4を保持したいと思います。それがすべての人にとってどのように機能しなければならないかということです。 – Probabilityman

3

plyrパッケージをご覧ください。私はこのためにddplyを使用します。

ddply(df, .(time), summarise, 
    mean_price = mean(prices), 
    sum_size = sum(size)) 

これはあなたのデータはdf内にあるとみなされます。 plyrの詳細については、Journal of Statistical Softwareのthis paperを参照してください。

その他の代替方法としては、data.tableまたはaveを使用する方法があります。

+0

ありがとう。私はかなりddplyの機能に従っていません。サイズ列の内容を追加したい場合は、さまざまな行で同じ時間を持つエントリの価格列を平均化します。 – Probabilityman

+0

サイズの列の合計を含めるようにコードを拡張しました。さらに、plyrについてよく記述した論文への参照を追加しました。 –

+0

ありがとうございました@Paul Hiemstra – Probabilityman

関連する問題