Заменить NA между значениями последовательностью - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть фрейм данных со значениями NA.Я хочу заменить эти NA последовательностью между значениями до и после NA.

Рассмотрим следующий пример:

# Example data
df <- data.frame(x1 = c(5, NA, NA, 10, NA),
                 x2 = c(NA, 2, NA, - 10, NA),
                 x3 = c(10, NA, 15, NA, 20))
df
# x1  x2 x3
#  5  NA 10
# NA   2 NA
# NA  NA 15
# 10 -10 NA
# NA  NA 20

NA между двумя значениями следует заменить последовательностью.NA в начале или в конце должны оставаться NA:

# Expected output

#       x1   x2     x3
#        5   NA     10
# 6.666667    2   12.5
# 8.333333   -4     15
#       10  -10   17.5
#       NA   NA     20

Как можно автоматически заменить NA между двумя значениями?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вот решение с пакетом imputeTS :

# Example data
df <- data.frame(x1 = c(5, NA, NA, 10, NA),
             x2 = c(NA, 2, NA, - 10, NA),
             x3 = c(10, NA, 15, NA, 20))

library("imputeTS")
na.interpolation(df, option = "linear)

Для imputeTS :: na.interpolation вы можете выбрать другой метод интерполяции с помощью параметра option (option = "spline"или option = "stine").

0 голосов
/ 10 февраля 2019

Функция na.approx в zoo очень легко выполняет эту интерполяцию.

df <- data.frame(x1 = c(5, NA, NA, 10, NA),
                 x2 = c(NA, 2, NA, - 10, NA),
                 x3 = c(10, NA, 15, NA, 20))
df
#>   x1  x2 x3
#> 1  5  NA 10
#> 2 NA   2 NA
#> 3 NA  NA 15
#> 4 10 -10 NA
#> 5 NA  NA 20

zoo::na.approx(df)
#>             x1  x2   x3
#> [1,]  5.000000  NA 10.0
#> [2,]  6.666667   2 12.5
#> [3,]  8.333333  -4 15.0
#> [4,] 10.000000 -10 17.5
#> [5,]        NA  NA 20.0

Создана в 2019-02-10 пакетом представлением (v0.2.0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...