首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建for循环来计算r中的二进制数据的gini函数?

如何创建for循环来计算r中的二进制数据的gini函数?
EN

Stack Overflow用户
提问于 2015-12-02 10:23:57
回答 1查看 1.2K关注 0票数 0

我有一些困难,试图计算基尼系数使用联合普查数据,并将真正感谢任何帮助。

我的数据看起来有点像这样(但是有14,000个13个变量的观测结果)。

代码语言:javascript
复制
location <- c('A','B','C', 'D', 'E', 'F')  
no_income <- c(20, 1, 40, 79, 12, 2)
income1 <- c(13, 4, 56, 17, 9, 4)
income2 <- c(27, 39, 49, 12, 19, 0)
income3 <- c(0, 1, 4, 3, 27, 0)

df <- data.frame(location, no_income, income1, income2, income3)

因此,对于每个观察,都有一个给定的位置,然后一系列列表示该地区有多少家庭在给定的收入范围内收入(因此对于地点A,20户家庭的收入为0美元,13户家庭的收入为income1,27户家庭的收入为27美元,income3为0美元)。

我创建了一个空列来将结果返回到:

df$gini = 0

然后,我创建了一个数字向量(x),其中包含我想为每个收入箱使用的收入金额。

代码语言:javascript
复制
x <- c(0, 300, 1000, 2000)

我一直试图在reldist包中使用gini函数,并编写了下面的for循环来循环每一行数据,应用gini函数并将输出返回到一个新列。

代码语言:javascript
复制
for (i in 1:nrow(samp)){ 
     w <- samp[i,2:5] 
     df$gini <- gini(x, w=rep(1, length=length(x)))
     }

问题是,当前返回的输出对于每一行都是相同的,这显然是不正确的。不过我对这件事还不太熟悉,也不知道我做错了什么.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-02 10:35:03

R向量操作,因此通常不需要编写循环;在本例中,您这样做是因为函数是如何工作的。您也不需要经常初始化容器(有时可能,但很少)。

下面是一个使用apply来循环行的工作示例:

代码语言:javascript
复制
# setup
install.packages("reldist")
library(reldist)

# dummy data
df = data.frame(ID=letters,
    Bin1=rpois(26, 3),
    Bin2=rpois(26, 8),
    Bin3=rpois(26, 1))

inc = c(0, 300, 1000)

# new column with gini
df$gini = apply(df[, 2:4], 1, function(i){
    gini(inc, i)
})

值得注意的是,gini()默认将weights参数设置为=rep(1, length=length(x)),因此如果您希望这样做,则不需要定义它。

编辑:--根据我在手册https://cran.r-project.org/web/packages/reldist/reldist.pdf中读到的内容,我添加了权重。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34040265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档