在计算序列的增量结果时,我很难通过group_by应用dplyr :: do() .
在一个简单的情况下,我可以使用for循环:
df <- data.frame(year = rep(2000:2002, 1), id = rep(letters[1], 3), obs1 = rep(1,3), obs2 = rep(1,3))
initialValue <- 5
for(i in 1:nrow(df)){
initialValue[i+1] <- initialValue[i] + df$obs1[i] + df$obs1[i]
}
因此,输出是初始值,后跟列表中2000年:2002年的更新值:
> initialValue
[1] 5 7 9 11
但是我有几年的数据和几个组(ID) . 我相信dplyr :: do()就是答案:
library(dplyr)
df <- data.frame(year = rep(2000:2002, 3), id = rep(letters[1:3], 3), obs1 = rep(1,9), obs2 = rep(1,9))
initialValue <- 5
doCalc <- function(obs){
initialValue <- initialValue + sum(obs)
}
df %>%
group_by(id) %>%
do(new <- doCalc(obs = c(.$obs1, .$obs2)))
错误:
Error: Results 1, 2, 3 must be data frames, not numeric
我期望的是每个组的tbl,每年的结果列表:
[[1]]
[1] 5 7 9 11
[[2]]
[1] 5 7 9 11
[[3]]
[1] 5 7 9 11
那么如何在函数中递增地应用它呢?
1 回答
我们可以使用
accumulate
来自purrr
或者我们可以使用
Reduce
来自base R
数据