考慮測試數據集更新列值
test = data.table("a"=c(NA,NA, 0, NA, NA), "b"=c(1,3,4,7,8), "c"=c(NA, 2,1,3,1), "group"=c(1,1,1,1,1))
a b c group
1: NA 1 NA 1
2: NA 3 2 1
3: 0 4 1 1
4: NA 7 3 1
5: 0 8 1 1
6: NA 9 1 1
我想更新一列的值,使得:
t = a_{i-1}+c_i
if(is.na(a_i)) {
a_i = t
}
這將導致以下數據集:
a b c group
1: NA 1 NA 1
2: NA 3 2 1
3: 0 4 1 1
4: 3 7 3 1
5: 0 8 1 1
6: 1 9 1 1
我將這個例子簡化爲一個組,但可以有多個。我寧願避免使用循環解決方案,因爲我的實際數據集有數百萬行。
這是因爲'NA'加上任何東西仍然是'NA'。第4行評估「0 + 3 = 3」,第5行評估第4行(它還沒有被替換)中的「NA」加上1,併產生「NA」。如果你想按順序更新*,你不能使用':='或'* apply'結構,你將不得不使用'for'循環或類似的。 – JDL
爲什麼a行在第3行保持等於0?爲什麼不是所有的「NA」? – eddi