R zoo package: na.approx изменяет длину вектора, когда NA находятся в начале - PullRequest
0 голосов
/ 22 февраля 2019

В пакете zoo есть функция na.approx (или na.spline), которая заменяет NA в ваших данных либо приближениями, либо сплайнами.

Один потенциальный аргумент - maxgap, который дает самый большой пробел для заполнения,Это работает нормально, за исключением того, что если NA находятся в начале вектора, функция изменяет длину вектора.

Например:

require(zoo)
x <- 1:20 + rnorm(20)
x1 <- x
x1[5] <- x1[6] <- NaN
length(na.approx(x1, maxgap = 1)) == length(x) # TRUE
x2 <- x
x2[1] <- x2[2] <- NaN
length(na.approx(x2, maxgap = 1)) == length(x) # FALSE

Это проблематично при использовании этогофункция с фреймами данных.Например:

require(dplyr)
df1 <- tibble(A = 1:20, B = x1)
df1 %>% 
  mutate(B_fill = na.approx(B, maxgap = 1))

df2 <- tibble(A = 1:20, B = x2)
df2 %>% 
  mutate(B_fill = na.approx(B, maxgap = 1))
# Error: Column `B_fill` must be length 20 (the number of rows) or one, not 18

1 Ответ

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

Когда я задавал этот вопрос, я нашел ответ, просто измените аргумент na.rm.

df2 %>% 
  mutate(B_fill = na.approx(B, maxgap = 1, na.rm = FALSE))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...