如何获取列的滞后值,并将值粘贴到字符串中?
例如,假设以下数据框,结果将是列'滞后'
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 = ','))
}
}
答案 0 :(得分: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
答案 1 :(得分:0)
我发现你也可以直接调用累积。
这是我提出的,与分组有关(即:累积在新组的开头重置):
df %>%
group_by(group) %>%
mutate(lagged = accumulate(total_volume, paste, collapse = ',')