R不应该返回NaN

时间:2018-11-21 15:42:59

标签: r nan rowsum

我想计算转移支付占总收入(转移+工资)的一部分。但是,R在数学上不应该返回NaN。

我的数据结构是一个数据框,看起来与此类似(总共有500.000行和50列):

enter image description here

目前,我在上面示例数据框中的代码如下所示:

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个值。在此数据集中。因此,我在想,我可能在代码中做错了什么?

1 个答案:

答案 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