当前位置:  开发笔记 > 编程语言 > 正文

参考前一行计算

如何解决《参考前一行计算》经验,为你挑选了1个好方法。

我是R的新手,似乎无法掌握如何调用之前的"自我"值,在这种情况下是前一个"b" b[-1].

b <- ( ( 1 / 14 ) * MyData$High + (( 13 / 14 )*b[-1]))

显然我在那里的某个地方需要一个NA用于第一次计算,但我无法自己解决这个问题.

添加所寻求的结果应该是的例子(A = MyData $ High):

  A  b
1 5  NA
2 10 0.7142...
3 15 3.0393...
4 20 4.6079...

G. Grothendi.. 5

1)for循环通常只需使用一个简单的循环:

MyData <- data.frame(A = c(5, 10, 15, 20))


MyData$b <- 0
n <- nrow(MyData)
if (n > 1) for(i in 2:n) MyData$b[i] <- ( MyData$A[i] + 13 * MyData$b[i-1] )/ 14
MyData$b[1] <- NA

赠送:

> MyData
   A         b
1  5        NA
2 10 0.7142857
3 15 1.7346939
4 20 3.0393586

2)减少 它也可以使用Reduce.首先定义一个f执行循环体的函数,然后我们Reduce重复调用它,如下所示:

f <- function(b, A) (A + 13 * b) / 14
MyData$b <- Reduce(f, MyData$A[-1], 0, acc = TRUE)
MyData$b[1] <- NA

给出相同的结果.

这给出了矢量化的外观,但实际上如果你看Reduce它的来源for本身就是一个循环.

3)过滤器注意问题的形式是一个递归滤波器,系数13/14在A/14上运行(但A [1]用0代替)我们可以编写以下内容.因为filter返回一个时间序列,我们用c(...)它来将它转换回普通的向量.实际上这种方法是矢量化的,因为过滤操作是在C中执行的.

MyData$b <- c(filter(replace(MyData$A, 1, 0)/14, 13/14, method = "recursive"))
MyData$b[1] <- NA

再次给出相同的结果.

注意:所有解决方案都假设MyData至少有一行.



1> G. Grothendi..:

1)for循环通常只需使用一个简单的循环:

MyData <- data.frame(A = c(5, 10, 15, 20))


MyData$b <- 0
n <- nrow(MyData)
if (n > 1) for(i in 2:n) MyData$b[i] <- ( MyData$A[i] + 13 * MyData$b[i-1] )/ 14
MyData$b[1] <- NA

赠送:

> MyData
   A         b
1  5        NA
2 10 0.7142857
3 15 1.7346939
4 20 3.0393586

2)减少 它也可以使用Reduce.首先定义一个f执行循环体的函数,然后我们Reduce重复调用它,如下所示:

f <- function(b, A) (A + 13 * b) / 14
MyData$b <- Reduce(f, MyData$A[-1], 0, acc = TRUE)
MyData$b[1] <- NA

给出相同的结果.

这给出了矢量化的外观,但实际上如果你看Reduce它的来源for本身就是一个循环.

3)过滤器注意问题的形式是一个递归滤波器,系数13/14在A/14上运行(但A [1]用0代替)我们可以编写以下内容.因为filter返回一个时间序列,我们用c(...)它来将它转换回普通的向量.实际上这种方法是矢量化的,因为过滤操作是在C中执行的.

MyData$b <- c(filter(replace(MyData$A, 1, 0)/14, 13/14, method = "recursive"))
MyData$b[1] <- NA

再次给出相同的结果.

注意:所有解决方案都假设MyData至少有一行.

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有