2013-03-01 110 views
0

我想用R從軟件包reldist中取出gini()函數來計算幾個圖的基尼係數。 我有一個數據框,我需要使用兩列作爲gini函數的輸入。在兩列上使用tapply而不是一個

> 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 

基尼函數使用用於計算所述第一元件(C13這裏)和所述第二元件是所述權重(W這裏)對應於來自C13的每個元素。

所以我需要使用的列C13和W這樣的:

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

的事情是我想對每個小區(IDP)做到這一點。我有四千個不同的idp值,每個值有兩個其他列的數十個值。

我想我可以使用函數tapply()來做到這一點。但是我不能在使用tapply的函數中放置兩個colums。如你所知,這是行不通的。 所以,我很想得到的結果是這樣的數據幀:

idp Gini 
1 19 0.12 
2 21 0.45 
3 35 0.65 
4 65 0.23 

你有如何做到這一點任何想法?也許plyr包? 謝謝你的幫助!

回答

1

您可以使用庫plyr()中的函數ddply()來計算每個級別的係數(在示例數據框中將某些idp值更改爲21)。

library(plyr) 
library(reldist) 
ddply(merged,.(idp),summarize, Gini=gini(c13,w)) 

    idp  Gini 
1 19 0.15307402 
2 21 0.05006588 
+0

謝謝。我明確需要在這個plyr包上工作。似乎充滿了有趣的功能。 – Tom 2013-03-01 11:06:56