我是 R 新手,正在解决一个问题。
我需要一个函数来根据给定大小的窗口内元素的平均值来估算向量中的缺失值。
然而,这个窗口将会移动,因为假设我的NA位置为 30,而我的窗口大小为 10,则应该计算 的平均值x[20:40]。因此,对于每个找到的NA,窗口均值都会不同。
我一直在尝试这个:
impute.to.window.mean <- function(x, window) {
na.idx <- is.na(x) #find missing values in x
for (na in na.idx) {
y <- (x[na]-window):(x[na]+window)
na.idx[na] <- mean(y, na.rm = TRUE)
}
return(x)
}
Run Code Online (Sandbox Code Playgroud)
但这是不正确的,我不知道如何继续。
我有一个时间序列数据集,其中有一些缺失值。我想估算缺失值,但我不确定哪种方法最合适,例如包中的线性、样条或 stine imputeTS。
为了完整起见,我想测试一下我的数据是否是 MCAR、MAR、NMAR。我有一个合理的想法,它是 MCAR,但我有兴趣进行测试。
str(wideRawDF)
'data.frame': 1343 obs. of 13 variables:
$ Period.Start.Time: POSIXct, format: "2017-01-20 16:30:00" "2017-01-20 16:45:00" "2017-01-20 17:00:00" "2017-01-20 17:15:00" ...
$ DO0182U09A3 : num -102 -101 -101 -101 -101 ...
$ DO0182U09B3 : num -103.4 -102.8 -103.3 -95.9 -103 ...
$ DO0182U09C3 : num -103.9 -104.2 -103.9 -99.2 -104.1 ...
$ DO0182U21A1 : num -105 -105 -105 -104 -102 ...
$ DO0182U21A2 : num -105 -104 -105 -105 -105 ...
$ DO0182U21A3 : …Run Code Online (Sandbox Code Playgroud) 我正在尝试imputeTS包中的功能。该包提供了多个函数来估算单变量时间序列数据中的缺失值。我测试了它们,除了功能之外,它们都很棒na_kalman。此函数更改原始数值向量。下面是一个例子。
# Load packages
library(imputeTS)
# Set seeds
set.seed(123)
# Generate 10 random number
dat <- rnorm(10)
# Replace the first 10 numbers to be NA
dat[1:5] <- NA
# Check the numbers in dat
dat
[1] NA NA NA NA NA 1.7150650 0.4609162 -1.2650612 -0.6868529
[10] -0.4456620
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我创建了一个包含 10 个数字的向量,而前 5 个数字是NA。
# Apply the na_kalman function
dat2 <- na_kalman(dat)
# Check the numbers in dat2
dat2
[1] 1.7150650 1.7150650 1.7150650 1.7150650 1.7150650 …Run Code Online (Sandbox Code Playgroud)