3

私はこのコードから data.frame を持っています:

   my_df = data.frame("read_time" = c("2010-02-15", "2010-02-15", 
                                      "2010-02-16", "2010-02-16", 
                                       "2010-02-16", "2010-02-17"), 
                      "OD" = c(0.1, 0.2, 0.1, 0.2, 0.4, 0.5) )

これはこれを生成します:

> my_df
   read_time  OD
1 2010-02-15 0.1
2 2010-02-15 0.2
3 2010-02-16 0.1
4 2010-02-16 0.2
5 2010-02-16 0.4
6 2010-02-17 0.5

それぞれの個別の read_time で OD 列を平均化し (複製されているものと複製されていないものがあることに注意してください)、標準偏差も計算して、次のような表を作成します。

> my_df
   read_time  OD        stdev
1 2010-02-15 0.15       0.05
5 2010-02-16 0.3         0.1
6 2010-02-17 0.5         0

data.frame でこのような値を連結するのに最適な関数はどれですか?

4

3 に答える 3

7

これにはplyrパッケージがよく使われますが、基本機能by()aggregate()役立ちます。

> ddply(my_df, "read_time", function(X) data.frame(OD=mean(X$OD),stdev=sd(X$OD)))
   read_time      OD   stdev
1 2010-02-15 0.15000 0.07071
2 2010-02-16 0.23333 0.15275
3 2010-02-17 0.50000      NA

欠落しているビットを追加して、最後の std.dev の NA の代わりに 0 を返すことができます。

また、data.frame の構築で使用した (変数の) 引用符は必要ありません。

于 2010-03-18T22:14:32.807 に答える
3

パッケージ data.table を試すことができます。MySQL を知っていれば、すべての機能を非常に簡単に取得できるはずです。それ以外の場合は、基本で十分です ;-)

my_dfdt<-data.table(my_df)
mean<-my_dfdt[,mean(OD), by="read_time"]
sd<-  ..  

両方を 1 行で結合することも、最後に cbind することもできます。

もう 1 つの利点は、サンプルが大きい場合に非常に高速であることです。非常に高速です...ドキュメントを参照してください。

于 2010-03-19T21:15:26.703 に答える
1

これは、を使用aggregateして平均と標準偏差を取得する方法を示していますread_time

>aggregate(my_df$OD, by=list(my_df$read_time), function(x) mean(x))

     Group.1         x
1 2010-02-15 0.1500000
2 2010-02-16 0.2333333
3 2010-02-17 0.5000000


>aggregate(my_df$OD, by=list(my_df$read_time), function(x) sd(x))
     Group.1          x
1 2010-02-15 0.07071068
2 2010-02-16 0.15275252
3 2010-02-17         NA
于 2010-03-19T03:10:23.783 に答える