-2

最近、R で data.table パッケージを使い始めました。データの変換と集計に非常に便利だと思います。私が見逃していることの 1 つは、複数の行で定義されているデータをどのように変換するのかということです。最初に data.frame/table をワイド フォーマットに変更する必要がありますか?

次のデータ テーブルがあるとします。

dt=data.table(group=c("a","a","a","b","b","b"),
              subg=c("f1","f2","f3","f1","f2","f3"), 
              counts=c(3,4,5,8,9,10))

また、グループごとに、各サブグループの相対度数 (c1/(c1+c2+c3)) とその他のプロパティを c1、c2、c3 (c1、c2、c3 は f1 に関連付けられたカウント) の関数として計算します。 f2 および f3)。

データ テーブルをワイド フォーマットに変換し、変換を適用する方法を確認できます。これを長い形式で直接計算する方法はありますか(理想的にはデータテーブルを使用して)?

一般に、グループとサブグループは複数の要因で表すことができます。

4

2 に答える 2

1

OPを正しく理解していれば、次のようなsmthが必要です。

dt[, {bigN = .N; .SD[, .N / bigN, by = subg]}, by = group]

または多分(そして非常に似ています)これ:

dt[, {counts.sum = sum(counts); .SD[, counts / counts.sum, by = subg]},
     by = group]
于 2013-08-07T18:39:55.933 に答える
0

data.frame を使用している場合はddply、plyr パッケージから使用できます (2 段階のアプローチ):

dt1<-ddply(dt,.(group),transform, gcount=sum(counts))# gcount=sum of count for each group
>dt1
group subg counts gcount
1     a   f1      3     12
2     a   f2      4     12
3     a   f3      5     12
4     b   f1      8     27
5     b   f2      9     27
6     b   f3     10     27

dt2<-ddply(dt1,.(group,subg),transform,rel.count=counts/gcount) #rel.count=relative frequency
>dt2
  group subg counts gcount rel.count
1     a   f1      3     12 0.2500000
2     a   f2      4     12 0.3333333
3     a   f3      5     12 0.4166667
4     b   f1      8     27 0.2962963
5     b   f2      9     27 0.3333333
6     b   f3     10     27 0.3703704
于 2013-08-07T18:51:35.733 に答える