R在下一次迭代中使用上一次迭代的结果

R在下一次迭代中使用上一次迭代的结果,r,loops,dynamic,recursion,apply,R,Loops,Dynamic,Recursion,Apply,我有一个包含两列的数据框: id score 1 0.5 1 0.7 1 0.8 2 0.7 2 0.8 2 0.9 我想通过迭代“score”的行来生成一个新列(“new”),应用两个函数(“function1”或“function2”)中的一个,条件是“id”与最后一行id值不同还是相同。这部分我可以做,我的问题是我希望function2引用function1生成的值。比如: function1 <- fu

我有一个包含两列的数据框:

id  score  
1     0.5  
1     0.7  
1     0.8  
2     0.7  
2     0.8  
2     0.9  
我想通过迭代“score”的行来生成一个新列(“new”),应用两个函数(“function1”或“function2”)中的一个,条件是“id”与最后一行id值不同还是相同。这部分我可以做,我的问题是我希望function2引用function1生成的值。比如:

function1 <- function(score) {new <- score*10 return(new)}
function2 <- function(score) {new <- score*new[-1] return(new)}

id  score  new    
1     0.5  5   
1     0.7  3.5  
1     0.8  2.8  
2     0.7  7  
2     0.8  5.6  
2     0.9  5.04  

函数1对于问题中的具体示例:

DT <- read.table(text="id  score  
1     0.5  
1     0.7  
1     0.8  
2     0.7  
2     0.8  
2     0.9  ", header=TRUE)

library(data.table)
setDT(DT)

DT[, new := 10*cumprod(score), by=id]
#   id score  new
#1:  1   0.5 5.00
#2:  1   0.7 3.50
#3:  1   0.8 2.80
#4:  2   0.7 7.00
#5:  2   0.8 5.60
#6:  2   0.9 5.04
DT
df <- data.frame(id=rep(c(1,2),each=3), score=c(.5,.7,.8,.7,.8,.9))
require(dplyr)    
mutate(group_by(df, id), new = 10*cumprod(score))

#Source: local data frame [6 x 3]
#Groups: id

#  id score  new
#1  1   0.5 5.00
#2  1   0.7 3.50
#3  1   0.8 2.80
#4  2   0.7 7.00
#5  2   0.8 5.60
#6  2   0.9 5.04