【问题标题】:R calculate the percentage change when the denominator is 0R计算分母为0时的百分比变化
【发布时间】:2014-06-26 21:38:40
【问题描述】:

我正在尝试在 R 中完成一项简单的任务。 我的向量是这样的:

data<-c(0.00,0.04,0.17,0.17,0.17,0.17,0.13,0.00
        0.00,0.00,1.55,1.73,1.73,1.73,1.73,0.19)

我正在尝试计算从一个数字到下一个数字的百分比变化。 该公式是一个简单的百分比公式:

(下一个数字 - 上一个数字)/上一个数字。

但是在某些数字对中存在一个小问题。例如,为了计算从第一个数字到第二个数字的百分比变化,公式为:

(0.04-0.00)/0.00 

即使实际上增加了 4%,哪个 R 将返回为 Nan。第二个和第三个数字之间的百分比变化很容易:

(0.17-0.04)/0.04 

但是对于除以 0.00 的对是有问题的。有什么方法可以告诉R,如果等式除以零,则不要除以零并将(下一个数字-上一个数字)之间的差表示为百分比。

我使用 diff 函数来计算每个数字与前一个数字之间的差异。

【问题讨论】:

  • 必须定义你想要的结果。
  • "增加了 4%" 不,零的 4% 为零。如果你不同意数学,你可以发明自己的数学,但我不建议这样做。
  • 可以编程 R 在x(t) 不为零时给你(x(t+1)-x(t))/x(t),在x(t) 为零时给你x(t+1)-x(t)(你可以使用?ifelse函数),但是以这种方式不一致是一个真的坏主意。您可能应该更仔细地考虑您的问题。最简单的方法是始终使用绝对差异x(t+1)-x(t)
  • 即使忽略零的问题,您的结果也会产生极大的误导性,因为在没有提供关于数据集大小的太多信息的情况下,百分比会发生很大变化。
  • 非常感谢您的 cmets 并为我对基础数学的无知感到抱歉。我刚刚意识到自己的错误并再次思考如何更好地计算我想要做什么

标签: r diff


【解决方案1】:

这样的东西应该可以工作,尽管如上所述,你的数学仍然是个谜

ifelse(data[-length(data)] != 0, diff(data)/data[-length(data)], diff(data))

## [1]  0.0400000  3.2500000  0.0000000  0.0000000  0.0000000 -0.2352941 -1.0000000  0.0000000  0.0000000  1.5500000  0.1161290  0.0000000  0.0000000  0.0000000 -0.8901734

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 2018-06-20
    • 2013-01-14
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2015-09-07
    相关资源
    最近更新 更多