首页 > 解决方案 > R 在不应该的时候返回 NaN

问题描述

我想计算作为总收入的一部分的转移份额(转移+工资)。然而,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,通常会发生 NaN,但在此数据中没有观察值应该除以 0放。因此,我在想,我可能在代码中做错了什么?

标签: rnanrowsum

解决方案


我没有收到任何错误:

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

推荐阅读