Вычисление лагов, но группировка по двум категориям с помощью dplyr - PullRequest
1 голос
/ 19 июня 2020

Я хочу создать var3 с использованием лага (dplyr пакет), но он должен соответствовать году и идентификатору. Я имею в виду, что лаг должен принадлежать соответствующему ID. Набор данных похож на несбалансированную панель.

YEAR ID VARS
2010 1 -
2011 1 -
2012 1 -
2010 2 -
2011 2 -
2012 2 -
2010 3 -
... 

Моя проблема похожа на следующий вопрос / сообщение, но сгруппированы по двум категориям:

dplyr: lead () и лаг () неверно при использовании с group_by ()

Я безуспешно пытался расширить решение (получаю NA s).

Попытка №1:

data %>%
  group_by(YEAR,ID) %>%
  summarise(var1 = ...
            var2 = ...
            var3 = var1 - dplyr::lag(var2))
  )

Попытка №2:

data %>%
  group_by(YEAR,ID) %>%
  summarise(var1 = ...
            var2 = ...
            gr = sprintf(YEAR,ID)
            var3 = var1 - dplyr::lag(var2, order_by = gr))
  )

Минимальный пример:


MyData <- 
data.frame(YEAR = rep(seq(2010,2014),5),
           ID = rep(1:5, each=5),
           var1 = rnorm(n=25,mean=10,sd=3),
           var2 = rnorm(n=25,mean=1,sd=1)
           )

MyData %>%
  group_by(YEAR,ID) %>%
  summarise(var3 = var1 - dplyr::lag(var2)
  )

Заранее спасибо.

1 Ответ

0 голосов
/ 20 июня 2020

Вы имеете в виду group_by(ID) и фактически «заказ по ГОДУ»?

...