Первые отличия панели данных в зависимости от дополнительных переменных R - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть набор данных панели, который выглядит следующим образом

ID     Model    Month    Country      Activations  avg_price
1      VW Golf  2012-01  NL              23           5000
1      VW Golf  2012-02  NL              2            5500
1      VW Golf  2012-01  FR              8            6000
1      VW Golf  2012-02  FR              34           7000
2      Audi TT  2012-01  NL              8            6900

Теперь я хочу взять первые различия для переменных Activations и avg_price.Я делаю это, используя функцию diff(data$Activations) из пакета plm, но сначала мне нужно преобразовать фрейм данных, используя pdata.frame(data).Итак:

data_fd = pdata.frame(data)
data_fd$Activations = diff(data_fdactivations)

Возвращает следующую ошибку, используя данные выше: duplicate couples (id-time) in resulting pdata.frame.Это потому, что у меня есть данные по разным странам, и когда я агрегирую данные по всем странам (таким образом, всего Activations и avg_price и только одна комбинация id-month), это прекрасно работает.Однако я хочу теперь взять первые различия, также используя переменную Country.

Мой фрейм данных должен выглядеть следующим образом:

 ID     Model    Month    Country      Activations  avg_price
 1      VW Golf  2012-01  NL              NA           NA
 1      VW Golf  2012-02  NL             -21           500
 1      VW Golf  2012-01  FR              NA           NA
 1      VW Golf  2012-02  FR              26           1000
 etc

Кто-нибудь знает, как я могу это сделать?

1 Ответ

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

Посмотрите, это то, что вы хотите?

lag_new <- structure(list(ID = c(1L, 1L, 1L, 1L, 2L), Model = structure(c(2L, 
                                                                          2L, 2L, 2L, 1L), .Label = c("Audi TT", "VW Golf"), class = "factor"), 
                          Month = structure(c(1L, 2L, 1L, 2L, 1L), .Label = c("2012-01", 
                                                                              "2012-02"), class = "factor"), Country = structure(c(2L, 
                                                                                                                                   2L, 1L, 1L, 2L), .Label = c("FR", "NL"), class = "factor"), 
                          Activations = c(23L, 2L, 8L, 34L, 8L), avg_price = c(5000L, 
                                                                               5500L, 6000L, 7000L, 6900L), Activations_new = c(NA, -21L, 
                                                                                                                                6L, 26L, -26L), avg_price_new = c(NA, 500L, 500L, 1000L, 
                                                                                                                                                                  -100L)), row.names = c(NA, -5L), class = "data.frame")

lag_new$Activations_new <- lag_new$Activations-lag(lag_new$Activations)
lag_new$avg_price_new <- lag_new$avg_price-lag(lag_new$avg_price)
...