首页 > 解决方案 > 取决于额外变量 R 的第一差异面板数据

问题描述

我有一个面板数据集,如下所示

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

现在,我想对Activationsavg_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. 这是因为我有不同国家/地区的数据,当我汇总所有国家/地区的数据时(如此总计Activationsavg_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

有谁知道我怎么能做到这一点?

标签: rplm

解决方案


看看,这是你想要的吗?

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)

推荐阅读