Интерполировать на основе нескольких условий в г - PullRequest
0 голосов
/ 05 декабря 2018

Начинающий пользователь здесь.У меня есть набор годовых данных о занятости для разных отраслевых классификаций и разных субрегионов.По некоторым наблюдениям, численность работников равна нулю.Я хотел бы заполнить эти значения с помощью линейной интерполяции (используя na.approx или какой-либо другой метод).Тем не менее, я хочу только интерполировать в рамках одной отраслевой классификации и субрегиона.

Например, у меня есть это:

subregion <- c("East Bay", "East Bay", "East Bay", "East Bay", "East Bay", "South Bay")
industry <-c("A","A","A","A","A","B" )
year <- c(2013, 2014, 2015, 2016, 2017, 2002)
emp <- c(50, NA, NA, 80,NA, 300)

data <- data.frame(cbind(subregion,industry,year, emp))

  subregion industry year  emp
1  East Bay        A 2013   50
2  East Bay        A 2014 <NA>
3  East Bay        A 2015 <NA>
4  East Bay        A 2016   80
5  East Bay        A 2017 <NA>
6 South Bay        B 2002  300

Мне нужно сгенерировать эту таблицу, пропустив интерполяцию пятого наблюдения, потому что субрегион и отрасль не соответствуют предыдущему наблюдению.

  subregion industry year  emp
1  East Bay        A 2013   50
2  East Bay        A 2014   60
3  East Bay        A 2015   70
4  East Bay        A 2016   80
5  East Bay        A 2017 <NA>
6 South Bay        B 2002  300

Статьи типа this были полезны, но я не могу понять, как адаптировать решение для соответствия требованию, чтобы два столбца были одинаковыми для интерполяции, вместо одного,Любая помощь будет оценена.

1 Ответ

0 голосов
/ 05 декабря 2018

Мы могли бы сделать группу по na.approx (из zoo)

library(tidyverse)
data %>% 
     group_by(subregion, industry) %>%
     mutate(emp = zoo::na.approx(emp, na.rm = FALSE))
# A tibble: 6 x 4
# Groups:   subregion, industry [2]
#  subregion industry  year   emp
#  <fct>     <fct>    <dbl> <dbl>
#1 East Bay  A         2013    50
#2 East Bay  A         2014    60
#3 East Bay  A         2015    70
#4 East Bay  A         2016    80
#5 East Bay  A         2017    NA
#6 South Bay B         2002   300

data

data <- data.frame(subregion,industry,year, emp)
...