我有一个如下的面板数据集
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
有人知道我该怎么做吗?
答案 0 :(得分:0)
看看,这是你想要的吗?
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)