我有一個包含兩列的data.table。當滿足條件時將data.table列值向前運行
dt = data.table(a = c(0,0,-1,rep(0,3),-1,1), b = c(1,2,3,2,4,2,4,5))
> dt
a b
1: 0 1
2: 0 2
3: -1 3
4: 0 2
5: 0 4
6: 0 2
7: -1 4
8: 1 5
我需要發生的是隨時隨地列==我需要在B列結轉到現場的下一行,其中列== -1,前值-1。如果沒有更多的-1s然後在B列的值需要一直持續到data.table
這到底是我希望的
a b
1: 0 1
2: 0 2
3: -1 3
4: 0 3
5: 0 3
6: 0 3
7: -1 4
8: 1 4
據透露,更快和更標準:'DT [,B:=第一( b),通過= cumsum(a == - 1)]' – Frank
@Frank謝謝,這是一個更好的解決方案 – Kristofersen
@Frank實際上,這並不奏效。它會將第一個-1之前的值更改爲該組中的最小值。這些值應該保持不變。 – Kristofersen