0

パッケージreldistからgini()関数を削除してRを使用して、いくつかのプロットのジニ係数を計算したいと思います。gini関数への入力として2つの列を使用する必要があるデータフレームがあります。

>  head(merged[,c(1,17,29)])
  idp c13     w
1  19 126 14.14
2  19 146 14.14
3  19  76 39.29
4  19  74 39.29
5  19  86 39.29
6  19  93 39.29

gini関数は、計算に最初の要素(ここではc13)を使用し、2番目の要素はc13の各要素に対応する重み(ここではw)です。

したがって、列c13とwを次のように使用する必要があります。

gini(merged$c13,merged$w)
[1] 0.2959369

問題は、プロット(idp)ごとにこれを実行したいということです。idpには4000の異なる値があり、それぞれに他の2つの列の値が数十あります。

関数tapply()を使用してこれを実行できると思いました。しかし、tapplyを使用して関数に2つの列を入れることはできません。

tapply(list(merged$c13,merged$w), merged$idp, gini)

ご存知のように、これは機能しません。したがって、結果として取得したいのは、次のようなデータフレームです。

 idp  Gini 
1  19 0.12 
2  21 0.45
3  35 0.65
4  65 0.23

これを行う方法について何か考えがありますか?多分plyrパッケージ?ご協力ありがとうございました!

4

1 に答える 1

1

ddply()ライブラリの関数を使用plyr()して、各レベルの係数を計算できます(データフレームの例では、一部のidp値が21に変更されています)。

library(plyr)
library(reldist)
ddply(merged,.(idp),summarize, Gini=gini(c13,w))

  idp       Gini
1  19 0.15307402
2  21 0.05006588
于 2013-03-01T10:55:04.963 に答える