1) Используйте na.spline
(для сплайн-интерполяции) или na.approx
(для линейной интерполяции) или na.locf
(для переноса последнего не-NA вперед).Все в пакете зоопарка.Мы показываем na.spline
ниже, но вы можете заменить любой из перечисленных, если хотите.Посмотрите этот пакет для этих и других процедур na. *.(Примечание в конце показывает ввод в воспроизводимой форме.)
library(zoo)
transform(TideModel, AtmP = na.spline(AtmP))
, давая:
Time Tide AtmP
1 00:00 0.51 1010.750
2 00:01 0.52 1010.584
3 00:02 0.52 1010.456
4 00:03 0.52 1010.362
5 00:04 0.52 1010.299
6 00:05 0.52 1010.263
7 00:06 0.52 1010.250
8 00:07 0.52 1010.256
9 00:08 0.52 1010.278
10 00:09 0.52 1010.312
11 00:10 0.53 1010.355
12 00:11 0.53 1010.402
13 00:12 0.53 1010.450
14 00:13 0.53 1010.495
15 00:14 0.53 1010.534
16 00:15 0.53 1010.562
17 00:16 0.54 1010.577
18 00:17 0.54 1010.574
19 00:18 0.54 1010.550
2) Если вы хотите заменить каждое NA на среднее значениеиз 9 рядов вокруг него:
library(zoo)
transform(TideModel,
AtmP = ifelse(is.na(AtmP),
rollapply(AtmP, 9, mean, na.rm = TRUE, partial = TRUE),
AtmP)
)
Примечание
Lines <- "Time Tide AtmP
00:00 0.51 1010.75
00:01 0.52 NA
00:02 0.52 NA
00:03 0.52 NA
00:04 0.52 NA
00:05 0.52 NA
00:06 0.52 1010.25
00:07 0.52 NA
00:08 0.52 NA
00:09 0.52 NA
00:10 0.53 NA
00:11 0.53 NA
00:12 0.53 1010.45
00:13 0.53 NA
00:14 0.53 NA
00:15 0.53 NA
00:16 0.54 NA
00:17 0.54 NA
00:18 0.54 1010.55"
TideModel <- read.table(text = Lines, header = TRUE)