2017-06-05 42 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 = ',') 
相關問題