我在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)
先感谢您!
您可以使用对每列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)
| 归档时间: |
|
| 查看次数: |
398 次 |
| 最近记录: |