我的動物園(時間序列)數據集看起來像下面並有數百行的:如何根據多個條件值之間的替換NA值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
NA NA NA NA 1 1 1 NA NA NA 3 3 3 NA NA 1 1
cycle4I <- zoo(c(NA, NA, NA, NA, 1, 1, 1, NA, NA, NA, 3, 3, 3, NA, NA, 1, 1))
這個變量是一個較大的動物園數據集的一部分。這個變量的一般模式是一系列的1,然後是NAs,然後是3,然後是NAs,並且從一系列1開始重複該模式。 NA的數量沒有規律。 (i)在1和3之間用2填滿新生,(ii)在3和1之間用4填充新生,以及(iii)在前四次觀察中填入新生4遵循一般模式。完成後,這些值將是一系列1,2,3和4,而沒有四個值中的每一個的數量模式。
我花了數小時試圖ifelse
和for
循環沒有成功。 (相對新手與這部分R.)
我以前在Stata做過這個任務,但無法找出R中的代碼來填充NA。該Stata的代碼來填充的NAS:
replace cycle4I = 2 if missing(cycle4I) & (cycle4I[_n-1] == 1 | cycle4I[_n-1] == 2) & (cycle4I[_n+1] == . | cycle4I[_n+1] == 3)
replace cycle4I = 4 if missing(cycle4I) & (cycle4I[_n-1] == 3 | cycle4I[_n-1] == 4) & (cycle4I[_n+1] == . | cycle4I[_n+1] == 1)
非常優雅。從中學習。沒有意識到邏輯TRUE的數值爲1:TRUE == 1產生TRUE。 – mac