R:連結とdata.frameの値を平均化に対処するための最良の機能は何ですか?

StackOverflow https://stackoverflow.com/questions/2473659

質問

私はこのコードから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

Iはそれぞれ別個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

A data.frame?

で、このような値を連結に対処するための最良の機能です
役に立ちましたか?

解決

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工事中だった(変数の)引用符は必要ありません。

他のヒント

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

my_dfdt<-data.table(my_df)
mean<-my_dfdt[,mean(OD), by="read_time"]
sd<-  ..  
スタイルの

あなたはまた、最後に1行またはCBINDの両方に参加することができ、あなたの呼び出し

もう一つの利点:あなたが大規模なサンプルを持っている場合、それは、非常に高速です。なぜ非常に高速...ドキュメントを参照してください。

これは、あなたの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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top