我想计算几个图的基尼系数,其中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)做这个 . 我有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包?谢谢您的帮助!
1 回答
您可以使用库
plyr()
中的函数ddply()
来计算每个级别的系数(在示例数据框中将某些idp
值更改为21) .