• R语言
  • R 语句 向量中的 多条件IF 语句 崩溃了

扣除额为3500元

税率表:y=x-3500(x为扣除三险一金后的月收入)

IF 0<y≤1500,应缴纳个人所得税=y*3%;

IF 1500<y≤4500,应缴纳个人所得税=y*10%-105;

IF 4500<y≤9000,应缴纳个人所得税=y*20%-555;

IF 9000<y≤35000,应缴纳个人所得税=y*25%-1005;

IF 35000<y≤55000,应缴纳个人所得税=y*30%-2755;

IF 55000<y≤80000,应缴纳个人所得税=y*35%-5505;

IF 80000<y,应缴纳个人所得税=y*45%-13505;

rawData 是一个个人收入样本 大概2万个左右 我要计算样本中的每个数字的 所得税

y就是所得税

然后存储到一个数组中。

y=rawData-3500

if ( 0<y≤1500)

(y*3%)

else if (1500<y≤4500)

(y*10%-105)

else if (4500<y≤9000)

(y*20%-555)

else if (9000<y≤35000)

(y*25%-1005)

else if (35000<y≤55000)

(y*30%-2755)

else if (55000<y≤80000)

(y*35%-5505)

else (80000<y)

(y*45%-13505)

我的语句 首先总是报告 else if 不对

其次 报告 if 不能应用在向量

首先,rawData是个向量不能直接拿来比较,否则只能比较第一个元素。

其次,编程语言里好像没有种写法0<y≤1500[s:12],应该是

y>0 & y<=1500


然后,不能用%取百分比,应该用小数。
<br />
y=rawData-3500<br />
for(i in 1:length(y)){<br />
if (y[i]>0 && y[i]<=1500) y[i] <- y[i]*0.03<br />
if (1500<y[i] & y[i]<=4500) y[i] <- y[i]*0.1-105<br />
if (4500<y[i] & y[i]<=9000) y[i] <- y[i]*0.2-555<br />
if (9000<y[i] & y[i]<=35000) y[i] <- y[i]*0.25-1005<br />
if (35000<y[i] & y[i]<=55000) y[i] <- y[i]*0.3-2755<br />
if (55000<y[i] & y[i]<=80000) y[i] <- y[i]*0.35-5505<br />
if (80000<y[i]) y[i] <- y[i]*0.45-13505}<br />
</p>

回复 第2楼 的 superabe:能不能用 lapply呢?

回复 第3楼 的 Wallee:应该可以的,那样就不用for循环了

回复 第4楼 的 superabe:嗯 我现在试了下 这么写 但是后来在算的时候 的出来的数组是 “NULL” 疯了

</p>
<p>taxPerMonNew<-function(sinRawData){<br />
y<-sinRawData<br />
if (y<=3500) {0<br />
}else{<br />
  y<-sinRawData-3500}</p>
<p>if (y>0 && y<=1500)  y*0.03<br />
if (1500<y & y<=4500)  y*0.1-105<br />
if (4500<y & y<=9000) y*0.2-555<br />
if (9000<y & y<=35000) y*0.25-1005<br />
if (35000<y & y<=55000) y*0.3-2755<br />
if (55000<y & y<=80000)  y*0.35-5505<br />
if (80000<y)  y*0.45-13505}</p>
<p>taxFunPerMonNew<-function(rawData,taxFun){<br />
   lapply(rawData,taxFun)</p>
<p>}</p>
<p>taxDataPerMonNew2011<-taxFunPerMonNew(rawData2011,taxPerMonNew)</p>
<p>


其中 rawData2011 是很多0到10000之间的数字 。 应用玩方程后 taxDataPerMonNew2011 里面的数据全部都是NULL 咋回事呢?
</p>

把if那一部分写一个函数,然后用lapply调用那个函数应该就可以了

回复 第6楼 的 superabe:我在5楼发现了点问题 你看下~ 谢谢啦~~~~~

x<- c(2000,5500,11500,28500,35500,73500,103500)<br />
y<- rep(0,length(x))<br />
z <- rep(0,length(x))<br />
y[x<=3500]=0<br />
y[x>3500]=x[x>3500]-3500<br />
z[y>=0 &y<=1500]=y[y>=0 &y<=1500]*0.03<br />
z[y>1500 &y<=4500]=y[y>1500 &y<=4500]*0.1-105<br />
z[y>4500 & y<=9000]=y[y>4500 & y<=9000]*0.2-555<br />
z[y>9000 & y<=35000]=y[y>9000 & y<=35000]*0.25-1005<br />
z[y>35000 & y<=55000]=y[y>35000 & y<=55000]*0.3-2755<br />
z[y>55000 & y<=80000]=y[y>55000 & y<=80000]*0.35-5505<br />
z[y>80000]=y[y>80000]*0.45-13505<br />
z<br />
`

这样应该也可以吧