我的动物园(时间序列)数据集如下所示,并持续数百行:
ifelse
此变量是较大动物园数据集的一部分。这个变量的一般模式是一系列的1,然后是N,然后是3,然后是NAs,并从一系列的1开始再次重复该模式。没有常规的NA数量模式。
我试图(i)用2填充1和3之间的NAs,(ii)用4填充3和随后1的NAs,以及(iii)在前4个观察中用4填充NA遵循一般模式。完成后,这些值将是一系列1,2,3和4,而不包含四个值中每个值的数量模式。
我花了好几个小时尝试for
和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)
循环但没有成功。 (这部分R的相对新手。)
我以前在Stata中完成了这个任务,但是无法弄清楚R中的代码来填充NA。填写NA的Stata代码是:
require.config({
baseUrl: "script/module",
paths: {
"signals": "vendor/signals"
}
});
require(["mainController"], function(){
console.log("Full dependency tree load complete");
});
答案 0 :(得分:0)
这是一种方式
library(dplyr)
library(zoo)
data_frame(cycle4I = c(NA, NA, NA, NA, 1, 1, 1, NA, NA, NA, 3, 3, 3, NA, NA, 1, 1)) %>%
mutate(final =
cycle4I %>%
lag %>%
na.locf(na.rm = FALSE) %>%
`+`(1) %>%
ifelse(is.na(cycle4I),
., cycle4I) )
答案 1 :(得分:0)
这是一种直截了当的方式:
library(zoo)
cycle4I <- zoo(c(NA, NA, NA, NA, 1, 1, 1, NA, NA, NA, 3, 3, 3, NA, NA, 1, 1))
x <- cycle4I
x[1] <- 3
x <- is.na(x) + na.locf(x)
x[1] <- 4
给出了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
4 4 4 4 1 1 1 2 2 2 3 3 3 4 4 1 1