私は、多数の列を持つ非常に大きなデータセットを持っています。私はこのデータを集約し、各列のセットごとに異なる機能を実行する必要があります。私は多くの列を持っているので、集計の各列で使用する各関数を手動で指定するのは面倒です。私はdata.table
と集計する方法について多くの記事を読んだことがありますが、この状況を処理するものはありません。Data.tableを使用して大きなデータテーブルに異なる数式を持つ複数の列を集計するr
例
はmpg
データセットで作業をします。私はcyl
とtrans
で集計したいと思います。 cty
とhwy
の列の平均値を返しますが、最初の値をmanufacturer
とmodel
から戻したいとします。実際には、cols<-names(data)[10:50]
と.SDcols=cols
を指定して、もっと多くの列に適用します。私は別々に列の各セットを処理し、その後、データをマージすることができますが、これはあなたが数十の異なる列グループを持っているときに乱雑になります。私はdata.table
でよりよい方法が必要であると信じています。
require("data.table")
require("ggplot2") #for the mpg dataset
dat1<-data.table(mpg)
perf<-dat1[, lapply(.SD, ave), .SDcols=c("cty","hwy"), by=list(cyl,trans)] #Aggregate performance data.
info<-dat1[, lapply(.SD, first), .SDcols=c("manufacturer","model"), by=list(cyl,trans)] #Aggregate model data.
perf[info, on=list(cyl,trans)] #Merge data
> head(perf[info, on=list(cyl,trans)])
cyl trans cty hwy manufacturer model
1: 4 auto(l5) 6 6 audi a4
2: 4 manual(m5) 33 33 audi a4
3: 4 manual(m6) 7 7 audi a4
4: 4 auto(av) 2 2 audi a4
5: 6 auto(l5) 16 16 audi a4
6: 6 manual(m5) 18 18 audi a4
私は1回の操作で上記を実行することができますどのように質問
?私が考えているのは、各グループをサブセット化し、次にこのようなことをすることです。たぶん少し控えめすぎるかもしれませんが、私は私が推測する星のためだけに射撃しています。
dat1[, .(names(group1)=lapply(group1, ave),names(group2)=lapply(group2, first)), by=list(cyl,trans)]
を与えます。 – Frank
すばらしい答え。 「ave」の修正をお寄せいただき、ありがとうございました。これはワークフローをExcelと混合するためのものです。 – CCurtis