R:連結とdata.frameの値を平均化に対処するための最良の機能は何ですか?
-
20-09-2019 - |
質問
私はこのコードから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
所属していません StackOverflow