我想计算几个图的基尼系数,其中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),第二个元素是权重(此处为w),对应于c13中的每个元素。
所以我需要使用列c13和w这样:
gini(merged$c13,merged$w)
[1] 0.2959369
我想为每个情节(idp)做这件事。我有4千个不同的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包? 谢谢你的帮助!
答案 0 :(得分: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