如何在R中添加相邻行和前一个(当前)行的值?

时间:2016-07-05 15:04:03

标签: r

我正在尝试创建一个新列,该列使用其先前值的百分比添加到相邻行的值之上。

例如,在50%时,我想看到这个:

# original
x = 1:10
# 1
# 2 
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10

我想要

# 1
# 2.5
# 4.25
# 6.125
# 8.0625
# 10.03125
# 12.015625
# 14.0078125
# 16.00390625
# 18.00195313

我可以弄清楚如何使用for循环执行此操作,但我想知道是否有任何方法可以使用apply()或其他任何利用R的功能的方法更快一些。< / p>

在Excel中,这很简单:

B2=A2+0.5*B1.

3 个答案:

答案 0 :(得分:2)

Reduce是另一种选择,详细了解其工作原理,请参阅this answer here

Reduce(function(x,y) y + 0.5*x, x, acc=TRUE)
 #[1]  1.00000  2.50000  4.25000  6.12500  8.06250 10.03125 12.01562 14.00781 16.00391 18.00195

答案 1 :(得分:1)

一个选项是for(i in 2:length(x)) x[i] <- 0.5*x[i-1] + x[i] x #[1] 1.00000 2.50000 4.25000 6.12500 8.06250 #[6] 10.03125 12.01562 14.00781 16.00391 18.00195 循环

addStuff

答案 2 :(得分:1)

递归方法:

f <- function(n){
    if (n<=1){
        print(n)
        return(n)
    }
    print(0.5*f(n-1)+n)
}

# for example
f(10)

# [1] 1
# [1] 2.5
# [1] 4.25
# [1] 6.125
# [1] 8.0625
# [1] 10.03125
# [1] 12.01562
# [1] 14.00781
# [1] 16.00391
# [1] 18.00195

如果您想保存递归f函数的输出:

f <- function(n){
    if (n<=1)
        return(list(val=list(n), num=n))
    back <- f(n-1)
    back$val <- c(back$val, (0.5*back$val[[n-1]]+n))
    back$num <- c(back$num, n)
    return(back)
}

# for example
res <- f(10)

unlist(res$val)

# [1]  1.00000  2.50000  4.25000  6.12500  8.06250 10.03125 12.01562 
# 14.00781 16.00391 18.00195