在R中按行计算Gini

时间:2016-03-11 17:16:35

标签: r gini

计算器。

我试图计算数据帧每行内的基尼系数,即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列的gini?

提前致谢。

1 个答案:

答案 0 :(得分:1)

gini的函数reldist不接受数据框作为输入。您可以轻松获得数据帧第一列的系数,如下所示:

> gini(attacks$attempts_open_play)
[1] 0.1124042 

然而,当你执行c(attacks$attempts_open_play, attacks$attempts_corners, ...)时,实际上生成了一个包含数据帧的所有列的列表,因此你的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的第二个参数每行应用函数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

希望它有所帮助。