1

別の列の対応するエントリが同じエントリを持っている列のいくつかのエントリの平均を取得するにはどうすればよいですか?

たとえば、たとえば3列の大きなテーブルがあり、時間と価格は2です。たとえば、時間列の下で値が繰り返されているとします。たとえば、10:30が4回表示される場合、対応する価格列のエントリの平均を取り、それを1つの価格で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

3行目と4行目を1つの行にマージして、価格を平均化するように変更したいと思います。

4

2 に答える 2

3

のようなものはどうですか

tapply(prices, time, mean)

より完全な図については、次を参照してください。?tapply

しかし、列で何をしたいですsizeか?

編集:

価格の平均とサイズの最後の値を取得するための 1 つの提案を次に示します。

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)

psこれは、を使用して非常にうまく行うことができますddply-ポールの答えも参照してください!

于 2012-04-17T12:44:57.967 に答える
3

plyrパッケージもご覧いただけます。私はこれに使用ddplyします:

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

これは、データが にあることを前提としていますdf。のより詳細な説明については、Journal of Statistical Software のこの論文plyrを参照してください。

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

于 2012-04-17T13:16:51.433 に答える