首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中创建一个有界指数列

在R中创建一个有界指数列
EN

Stack Overflow用户
提问于 2019-08-11 22:57:55
回答 1查看 152关注 0票数 2

如何在2022年至2040年之间的数据帧中创建指数百分比列,其范围为1%和x%,其中可以设置指数方程的“峰值”?

在下面的预期结果表中,百分比开始增加1%,然后增加2%.然后在25%-35%的增长率范围内达到5%的“峰值”,然后下降到2-3%的增长率。

下面是我想要完成的一个例子:

示例结果

代码语言:javascript
复制
end_growth_rate <- 48

2022    1%
2023    2%
2024    3%
2025    4%
2026    6%
2027    8%
2028    10%
2029    12%
2030    15%
2031    18%
2032    21%
2033    25%
2034    30%
2035    35%
2036    39%
2037    42%
2038    44%
2039    46%
2040    48%

非常感谢您的帮助!非常感谢!如果需要任何澄清,我很乐意解释更多。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-11 23:19:23

将某些东西放入data.tabledata.frame中这一事实似乎无关紧要。你想要的只是一个开始、结束和曲线类型的函数。这可能是一个sigmoid函数 (也称为“逻辑函数”)。

试试这个:

代码语言:javascript
复制
mysigmoid <- function(n, min, max, maxe = 4, mine = -maxe) {
  y <- 1 / (1 + exp(-seq(mine, maxe, len = max(0, n))))
  min + (max - min) * (y - y[1]) / (y[n] - y[1])
}

您需要处理两个指数端点(maxemine,它们对应于上面sigmoid链接中指数方程中使用的左/右x值)才能得到完美的扩展。使用"-3到2",我可以得到“从1%开始,以1.9%结尾”,这似乎接近你的交流意图。

代码语言:javascript
复制
round(mysigmoid(19, 1, 49, 2, -3), 1)
#  [1]  1.0  1.8  2.9  4.2  5.8  7.9 10.3 13.1 16.4 20.0 23.9 27.9 31.8 35.6 39.1
# [16] 42.2 44.9 47.1 49.0
round(diff(mysigmoid(19, 1, 49, 2, -3)), 1)
#  [1] 0.8 1.0 1.3 1.6 2.0 2.4 2.9 3.3 3.6 3.9 4.0 4.0 3.8 3.5 3.1 2.7 2.3 1.9

(然后只需将它们分配给您选择的框架或表列。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57454193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档