我的动物园(时间序列)数据集看起来像下面并有数百行的:如何根据多个条件值之间的替换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