我有一个像这样的 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
我想将 a-f 列“向下”移动,每列都有不同的偏移量。列“a”根本没有移动。 “b”列应从第二行开始(向下移动 1),“c”列向下移动 2,依此类推。
当一列向下移动时,上面的值应该用0填充。data.table的行数不应增加:
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
您可以使用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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)