【问题标题】:First differences panel data depending on extra variables R取决于额外变量 R 的第一差异面板数据
【发布时间】:2018-12-10 08:49:05
【问题描述】:

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

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 变量进行区分。我使用plm 包中的diff(data$Activations) 函数执行此操作,但首先我必须使用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

有谁知道我如何做到这一点?

【问题讨论】:

    标签: r plm


    【解决方案1】:

    看看,这是你想要的吗?

    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)
    

    【讨论】:

    • 使用这种方法,lag_new$Activationslag(lag_new$Activations) 是相等的,因此我只得到零
    • 我在这种方法中没有得到任何零
    猜你喜欢
    • 2023-03-22
    • 2022-01-03
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 2019-04-24
    相关资源
    最近更新 更多