我想计算转移支付占总收入(转移+工资)的一部分。但是,R在数学上不应该返回NaN。
我的数据结构是一个数据框,看起来与此类似(总共有500.000行和50列):
目前,我在上面示例数据框中的代码如下所示:
df$transfershare <- (rowSums(df[,c(2,4,6)])/rowSums(df[,c(2,4,6,3,5,7)]))*100
基于:
Transfershare = total transfer / (total transfer + total salary)*100
总调动是2012-2014年调动的总和,总薪水是2012-2014年调动的总和。
问题在于,在运行此代码之前,我的df缺少0个值,但是在运行此代码后,它突然具有3000个值。在此数据集中。因此,我在想,我可能在代码中做错了什么?
答案 0 :(得分:1)
我没有任何错误:
df <- data.frame(id= c(1,2,3,4), Transfer2012 = c(200,0,0,300), Salary2012 = c(0,300,0,200), Transfer2013 = c(200,250,200,300),
Salary2013 = c(0,0,0,0), Transfer2014 = c(200,0,0,200), Salary2014 = c(0,300,0,0))
id Transfer2012 Salary2012 Transfer2013 Salary2013 Transfer2014 Salary2014
1 1 200 0 200 0 200 0
2 2 0 300 250 0 0 300
3 3 0 0 200 0 0 0
4 4 300 200 300 0 200 0
df$transfershare <- (rowSums(df[,c(2,4,6)])/rowSums(df[,c(2:7)]))*100
id Transfer2012 Salary2012 Transfer2013 Salary2013 Transfer2014 Salary2014 transfershare
1 1 200 0 200 0 200 0 100.00000
2 2 0 300 250 0 0 300 29.41176
3 3 0 0 200 0 0 0 100.00000
4 4 300 200 300 0 200 0 80.00000
您是否已确认变量为数字?
str(df)
'data.frame': 4 obs. of 7 variables:
$ id : num 1 2 3 4
$ Transfer2012: num 200 0 0 300
$ Salary2012 : num 0 300 0 200
$ Transfer2013: num 200 250 200 300
$ Salary2013 : num 0 0 0 0
$ Transfer2014: num 200 0 0 200
$ Salary2014 : num 0 300 0 0