0

以下は、「入力」と呼ばれるかなり大きなテーブルの一部です。

        [,1]     [,2]   [,3]             
[7146,] 20100324 7.70   4.0000000
[7147,] 20100324 2.22   0.0000000
[7148,] 20100325 2.12   0.0000000
[7149,] 20100326 2.29   0.0000000
[7150,] 20100327 2.10   0.0000000
[7151,] 20100328 2.26   2.0000000
[7152,] 20100328 2.01   1.6000000
[7153,] 20100328 2.17   0.0000000
[7154,] 20100329 1.92   0.0000000
[7155,] 20100330 2.15   0.0000000

私がやろうとしていることは次のとおりです。

同じ日付 (列 [,1] に日付が記載されている) を持つ行を集計し、これらの行の値を列 [,2] と [,3] で合計し、集計された行数で割ってみたいと思います。

出力は次のようになります。

        [,1]  [,2]   [,3]             
[1,] 20100324 4.96   2.0000000 # e.g: [1,2] = (input[7146,2] + input[7147,2])/2 = (7.70 
[2,] 20100325 2.12   0.0000000                + 2.22)/2 = 4.96 
[3,] 20100326 2.29   0.0000000
[4,] 20100327 2.10   0.0000000
[5,] 20100328 2.15   1.2000000
[6,] 20100329 1.92   0.0000000
[7,] 20100330 2.15   0.0000000

助けていただければ幸いです。

4

1 に答える 1

2

あなたのサンプルデータ

df<-read.table(text="           
 20100324 7.70   4.0000000
 20100324 2.22   0.0000000
 20100325 2.12   0.0000000
 20100326 2.29   0.0000000
 20100327 2.10   0.0000000
 20100328 2.26   2.0000000
 20100328 2.01   1.6000000
 20100328 2.17   0.0000000
 20100329 1.92   0.0000000
 20100330 2.15   0.0000000")

1 つの方法は、関数を使用してから、データの分割に使用される最初の列を除く各列をddply()計算することです。colMeans()

library(plyr)
ddply(df,.(V1),colMeans)
        V1       V2  V3
1 20100324 4.960000 2.0
2 20100325 2.120000 0.0
3 20100326 2.290000 0.0
4 20100327 2.100000 0.0
5 20100328 2.146667 1.2
6 20100329 1.920000 0.0
7 20100330 2.150000 0.0

を使用しても同じ結果が得られaggregate()ます。

aggregate(.~V1,data=df,mean)
        V1       V2  V3
1 20100324 4.960000 2.0
2 20100325 2.120000 0.0
3 20100326 2.290000 0.0
4 20100327 2.100000 0.0
5 20100328 2.146667 1.2
6 20100329 1.920000 0.0
7 20100330 2.150000 0.0

data.table3 番目のオプションは、特に大きなデータ フレームがある場合に、 package の利点を利用することです。

 library(data.table)
#Convert your data frame to data table and set column V1 as key.
 dt<-data.table(df,key="V1")
#Calculate mean for each column .SD means subset of your data table
 dt[,lapply(.SD,mean),by=V1]
         V1       V2  V3
1: 20100324 4.960000 2.0
2: 20100325 2.120000 0.0
3: 20100326 2.290000 0.0
4: 20100327 2.100000 0.0
5: 20100328 2.146667 1.2
6: 20100329 1.920000 0.0
7: 20100330 2.150000 0.0
于 2013-04-30T09:43:31.700 に答える