在r中除以0,避免NaN

时间:2014-03-06 09:16:50

标签: r

我这里有这个代码:

d$ICER <- d$Delta_Cost/d$Delta_LY

我为R中的矩阵中的每一行执行此操作,现在,第一行的值为Delta_CostDelta_LY = 0,因此ICER为{ {1}}并给我一个值0/0

如何将其修改为0而不是NaN

3 个答案:

答案 0 :(得分:2)

你可以这样做:

d$ICER <- d$Delta_Cost/d$Delta_LY
d$ICER[is.na(d$ICER)] <- 0

答案 1 :(得分:0)

您可以使用ifelse

d$ICER <- ifelse(!d$Delta_Cost, 0, d$Delta_Cost / d$Delta_LY)

答案 2 :(得分:0)

虽然这里的两个答案都提供了解决问题的完全有效的方法,但问题是它们都没有提供警告,不要将NaN更改为0,所以现在就去。

如果您计划对数据进行任何统计分析,天真地将NaN转换为0 会给您错误的答案。

这是一个向您展示问题的极端示例:

protected void exitFromApp() {
        finish();
        Intent localIntent = new Intent("android.intent.action.MAIN");
        localIntent.addCategory("android.intent.category.HOME");
        localIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(localIntent);
    }

public static boolean isSimSupport(Context context)
    {
        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        return !(tm.getSimState() == TelephonyManager.SIM_STATE_ABSENT);
    }

test_zeros的均值和中位数并不代表实际数据。 使用na.rm是一个更好的选择,因为它会从计算中完全删除带有NaN的行。 这仍有问题,应谨慎使用。

无论您选择使用哪种选项,都应该了解它对分析的影响。