如何在data.table中移动多个单元格值

Inf*_*ngi 0 r data.table

我在R里有一个data.table

 date a b c d e f 
 2008 1 5 3 6 9 8 
 2008 3 6 2 1 5 8
 2008 2 8 3 4 3 0
 2009 5 5 3 6 9 8
 2009 3 3 2 2 5 5
 2010 2 8 3 7 7 0
Run Code Online (Sandbox Code Playgroud)

现在我想将给定的表转换为新的布局.B列应从第二行开始,第三行第c列,第四行第d列,......其余值应填满"0".并且不应增加表的长度:

date a b c d e f
2008 1 0 0 0 0 0
2008 3 5 0 0 0 0
2008 2 6 3 0 0 0 
2009 5 8 2 6 0 0 
2009 3 5 3 1 9 0
2010 2 3 3 4 5 8
Run Code Online (Sandbox Code Playgroud)

先感谢您!

Fra*_*ank 9

您可以使用对每列Map应用不同的内容n:

cols <- setdiff(names(DT), "date")
DT[, (cols) := Map(shift, .SD, seq_along(.SD) - 1L, fill = 0), .SDcols = cols]

> DT
   date a b c d e f
1: 2008 1 0 0 0 0 0
2: 2008 3 5 0 0 0 0
3: 2008 2 6 3 0 0 0
4: 2009 5 8 2 6 0 0
5: 2009 3 5 3 1 9 0
6: 2010 2 3 3 4 5 8
Run Code Online (Sandbox Code Playgroud)