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