2017-06-05 78 views
0

如何获取列的滞后值,并将值粘贴到字符串中?将滞后值粘贴到折叠字符串/向量中

例如,假定以下的数据帧,其结果将是列“滞后”

 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 = ',')) 
} 
} 

回答

2

您可以使用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 
+0

谢谢!公认 –

0

我想通了,你也可以直接拨打电话积聚。

这就是我想出了,这与编组的作品(即:累积在一个新组的开始复位):

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