0

我想用 R 从包 reldist 中取消 gini() 函数来计算几个图的基尼系数。我有一个数据框,我需要从中使用两列作为 gini 函数的输入。

>  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),第二个元素是与 c13 中的每个元素对应的权重(此处为 w)。

所以我需要像这样使用列 c13 和 w :

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

问题是我想为每个情节(idp)执行此操作。我有 4000 个不同的 idp 值,每个值都有另外两列的几十个值。

我想我可以使用函数tapply() 来做到这一点。但是我不能使用tapply在函数中放置两个列。

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 回答