[英]dropping current row if the value of current row is the same as previous row in 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.