繁体   English   中英

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

[英]How to add an adjacent row and a previous (current) row's value in 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的功能更快的方法。

在Excel中,这将非常简单:

B2=A2+0.5*B1.

Reduce是另一种选择,有关其工作方式的详细演练,请参见此处的答案

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

一种选择是for循环

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

递归方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM