R 用中位数或平均值替换缺失值
我一直在尝试各种时间序列插补模型,用R 用中位数或平均值替换缺失值,r,R,我一直在尝试各种时间序列插补模型,用imputeTS插补缺失的时间序列,但测试结果很差。因为它看起来像季节性的时间序列数据,我想简单地用几个月的中位数或平均值来插补缺失的值 数据如下所示: > head(data, 10) v1 v2 v3 v4 1 1908 1 118 10 2 1908 2 138 33 3 1908 3 128 17 4 1908 4 NA 60 5 1908 5 NA 114 6 1908 6 72 124 7
imputeTS
插补缺失的时间序列,但测试结果很差。因为它看起来像季节性的时间序列数据,我想简单地用几个月的中位数或平均值来插补缺失的值
数据如下所示:
> head(data, 10)
v1 v2 v3 v4
1 1908 1 118 10
2 1908 2 138 33
3 1908 3 128 17
4 1908 4 NA 60
5 1908 5 NA 114
6 1908 6 72 124
7 1908 7 NA 44
8 1908 8 70 134
9 1908 9 58 121
10 1908 10 42 117
我计算了中值:
data %>%
as_tibble() %>%
group_by(v2) %>%
summarise(imp_v3 = median(v3, na.rm = TRUE),
imp_v4 = median(v4, na.rm = TRUE))
其中:
# A tibble: 12 x 3
v2 imp_v3 imp_v4
<int> <dbl> <dbl>
1 1 126 23
2 2 132 27.5
3 3 138 33
4 4 22.5 76
5 5 42.5 102.
6 6 72 127
7 7 82 50
8 8 80 51
9 9 57 121
10 10 24 98
11 11 145 71
12 12 130. 31
我们可以使用
replace
将NA
元素替换为列的median
library(dplyr)
data %>%
group_by(v2) %>%
mutate_at(vars(v3, v4), list(~ replace(., is.na(.), median(., na.rm = TRUE))))
# A tibble: 443 x 4
# Groups: v2 [12]
# v1 v2 v3 v4
# <int> <int> <dbl> <dbl>
# 1 1908 1 118 10
# 2 1908 2 138 33
# 3 1908 3 128 17
# 4 1908 4 22.5 60
# 5 1908 5 42.5 114
# 6 1908 6 72 124
# 7 1908 7 82 44
# 8 1908 8 70 134
# 9 1908 9 58 121
#10 1908 10 42 117
# … with 433 more rows
默认情况下,FUN
是mean
。如果我们想要median
指定FUN
data %>%
group_by(v2) %>%
mutate_at(vars(v3, v4), na.aggregate, FUN = median)
library(zoo)
data %>%
group_by(v2) %>%
mutate_at(vars(v3, v4), na.aggregate)
data %>%
group_by(v2) %>%
mutate_at(vars(v3, v4), na.aggregate, FUN = median)