1

堆栈溢出。

我正在尝试通过 6 列 (1326 x 6) 计算我的数据帧的每一行(1326 行长)内的基尼系数。

我现在的代码...

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

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

希望能帮助到你。

于 2016-03-13T11:25:07.167 回答