Определите группы со всеми пропущенными значениями для переменной и экстраполируйте внутри групп в R - PullRequest
1 голос
/ 05 августа 2020

Я хочу определить группы, в которых отсутствуют значения только для данной переменной. Мои данные выглядят так:

id <- seq(1:4)
year <- c(2005, 2006, 2007, 2008)
y <- c(6, 11, NA, NA, NA, NA, NA, NA, 9, NA, NA, 7, 8, 7, NA, 12)
test <- data.frame(id, year, y)
arrange(test, desc(id))
print(test)

Я попытался сгруппировать данные по идентификатору и создал переменную allNA, которая должна разделять группы, у которых есть только отсутствующие значения (мне также нужно сохранить эти строки нетронутыми в конечном результате ). Затем я экстраполировал на группы, у которых есть некоторые не пропущенные значения:

test %>% 
  group_by(id) %>% 
  mutate(allNA = !all(is.na(y))) %>%
  filter(allNA) %>%
  select(-allNA) %>%
  mutate(y2=na.spline(y))

Я продолжаю получать противоречивые результаты для моей экстраполяции. Иногда после создания переменной allNA я вижу некоторые значения FALSE, и значения 2007 года остаются отсутствующими или отбрасываются, но иногда, когда я выполняю код, все значения TRUE и все экстраполируются. Интересно, выполняет ли переменная allNA ту работу, которую она должна делать. Из-за этого я решил сначала определить группы _ здесь 2007 год _, у которых есть только НП, но я не знаю, как это сделать, и решить проблему экстраполяции.

1 Ответ

1 голос
/ 05 августа 2020

После создания столбца allNA используйте if/else, чтобы применить na.spline

library(dplyr)
library(zoo)
test %>% 
    group_by(id) %>%
    mutate(allNA = all(is.na(y)),
            y2 = if(!allNA[1]) na.spline(y) else y)
...