r语言 - 将滞后值粘贴到折叠的字符串/向量中



如何获取列的滞后值,并将值粘贴到字符串中矢量化?

例如,假设以下数据框,结果将是列"滞后">

date             total_volume      lagged
<date>           <int>             <chr>
2017-01-01       323512            323512
2017-01-02        28014            323512, 28014
2017-01-03        12323            323512, 28014, 12323
2017-01-04        11580            323512, 28014, 12323, 11580
2017-01-05        12161
2017-01-06        10796
2017-01-07        10087
2017-01-08        10406
2017-01-09        11261
2017-01-10        11333

我尝试使用这种方法:

df %>% 
mutate(lagged = paste(total_volume[1:row_number()], collapse = ','))

但这会返回错误。 我可以创建一个循环并创建它的函数,但是在 dplyr 中使用该函数时,它无法正常工作。

function(x) {
for (i in 1:nrow(x)){
print(paste(x$total_volume[1:i], collapse = ','))
}
}

您可以将Reduce函数与accumulate=T一起使用,它以递归方式应用paste

df %>% mutate(lagged = Reduce(function(i,j) paste(i,j,sep=","),total_volume,accumulate=T))

这将返回:

date   total_volume                                                      lagged
1  2017-01-01       323512                                                       323512
2  2017-01-02        28014                                                 323512,28014
3  2017-01-03        12323                                           323512,28014,12323
4  2017-01-04        11580                                     323512,28014,12323,11580
5  2017-01-05        12161                               323512,28014,12323,11580,12161
6  2017-01-06        10796                         323512,28014,12323,11580,12161,10796
7  2017-01-07        10087                   323512,28014,12323,11580,12161,10796,10087
8  2017-01-08        10406             323512,28014,12323,11580,12161,10796,10087,10406
9  2017-01-09        11261       323512,28014,12323,11580,12161,10796,10087,10406,11261
10 2017-01-10        11333 323512,28014,12323,11580,12161,10796,10087,10406,11261,11333

我想你也可以直接调用累积。

这是我想出的,它适用于分组(即:累积在新组开始时重置):

df %>%
group_by(group) %>%
mutate(lagged = accumulate(total_volume, paste, collapse = ',')