1

スタックオーバーフロー。

長さ1326行のデータフレームの各行内のジニ係数を6列(1326 x 6)で計算しようとしています。

私の現在のコード...

attacks$attack_gini  <- gini(x = c(attacks$attempts_open_play,
attacks$attempts_corners,attacks$attempts_throws,
attacks$attempts_fk,attacks$attempts_set_play,attacks$attempts_penalties))

... すべての行を同じ数字の 0.7522439 で埋めます - これは明らかに間違っています。

注: reldist パッケージの gini 関数を使用しています。

各行の 6 列のジニを計算する方法はありますか?

前もって感謝します。

4

1 に答える 1

2

の関数ginireldist、データフレームを入力として受け入れません。次のように、データフレームの最初の列の係数を簡単に取得できます。

> gini(attacks$attempts_open_play)
[1] 0.1124042 

ただしc(attacks$attempts_open_play, attacks$attempts_corners, ...)、そうすると、実際にはデータフレームのすべての列を含むリストを 1 つ生成しているため、gini 呼び出しは単一の数値を返します。たとえば、次のようになります。

> gini(c(attacks$attempts_open_play, attacks$attempts_corners))
[1] 0.112174

そのため、 のすべての行に同じ単一の番号を割り当てていますattacks$attack_gini。私が正しく理解していれば、行ごとの列の値のジニ係数を計算するには、次のようなapplyを使用できます

attacks$attack_gini <- apply(attacks[,c('attempts_open_play', 'attempts_corners', ...)], 1, gini)

ここで、値が 1 の 2 番目のパラメーターは、gini行ごとに関数を適用しています。

head(apply(attacks[,c('attempts_open_play', 'attempts_corners')], 1, gini))
[1] 0.026315789 0.044247788 0.008928571 0.053459119 0.019148936 0.007537688

それが役に立てば幸い。

于 2016-03-13T11:25:07.167 に答える