问题描述
我创建了一个函数来计算不同省份的卡瓦尼指数。以前效果很好。 首先,我们计算第i个人与其他收入高于第i个人的收入之和。然后除以所有收入的总和。现在,我认为每个省都可以算出Kakwain。
kk.index <- function(data,x,p) {
# x is index of income,p is index of province. The codes sort provinces firstly,and in every province to calculate Kakwani index.
# sort provinces,and sort income in every province
data <- data[order(data[,p],data[x]),] .
# calculate the index of the range of every province.
Fre <- data.frame(table(data[,p]))$Freq
fl <- length(Fre)
fre <- c()
fre[1] <- 0
for (i in 2 : (fl + 1)) {
fre[i] <- sum(Fre[1 : i - 1])
}
for (k in 1 : fl) {
a[k] <- sum(data[,x][(fre[k] + 1) : fre[k + 1]])
for (i in (fre[k] + 1) : fre[k + 1]) {
if( i < fre[k + 1]){
s[i] <- sum(data[,x][(i + 1) : fre[k + 1]]) - data[,x][i] * (fre[k + 1] - i)
kk[i] <- s[i] / a[k]
} else {
kk[i] <- 0
}
}
}
data <- cbind(data,kk)
return(data)
}
当我使用子集选择年龄小于55岁的人时。
ruagedata <- subset(ruraldata,age <= 55)
> table(ruagedata$prov)
2 3 4 5 6 8 9 10 11 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
116 30 16 153 83 25 91 118 41 46 78 73 52 107 36 72 62 63 25 22 17 65 108 8 109
for (i in 1 : length(ruagedata$prov)) {
a <- ruagedata[,30][i]
if (a <= 6) {
a <- a - 1
}else if (a>=8 & a <= 11) {
a <- a - 2
} else {
a <- a - 3
}
ruagedata[,30][i] <- a
}
> table(ruagedata$prov)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
116 30 16 153 83 25 91 118 41 46 78 73 52 107 36 72 62 63 25 22 17 65 108 8 109
我使用功能,它不起作用。
ruagedata <- kk.index(ruagedata,3,30)
Error in data.frame(...,check.names = FALSE) :
arguments imply differing number of rows: 1616,2496
Called from: data.frame(...,check.names = FALSE)
收捲时出错: (29)种类目前没有在'eval'里实现
Error: no more error handlers available (recursive errors?); invoking 'abort' restart
收捲时出错: INTEGER() can only be applied to a 'integer',not a 'unkNown type #29'
Error: no more error handlers available (recursive errors?); invoking 'abort' restart
browse[1]>
Error in xml_ns.xml_document(x) : external pointer is not valid
Error in xml_ns.xml_document(x) : external pointer is not valid
此代码在win10和R x64 4.0.0上运行。因为该函数在其他数据子集中工作良好,所以我认为我的算法是正确的。我不知道参数的平均值意味着行数不同:1616、2496。1616是总数。数字2496使我感到困惑。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)