【问题标题】:reshape time series into panel in r将时间序列重塑为 r 中的面板
【发布时间】:2016-11-05 14:31:56
【问题描述】:

现在我有 3 个国家/地区的时间序列 GDP 数据。我想为数据集创建一个面板,以进行进一步的面板分析。我不明白如何通过 reshape package a plm 创建它。

           AT      CZ       DE
 1995    68410.7 30457.3 630631.5
 1995.25 68353.5 30213.1 625515.3
 1995.5  68103.3 29766.4 623124.0
 1995.75 67896.0 29661.8 621122.0
 1996    67888.8 29595.8 616673.1
 1996.25 67874.5 29880.0 616645.4

我发现我可以用这种方式重塑数据:

long <- reshape(as.data.frame(GDP.series),varying = list(names(GDP.series)), v.names="GDP",
            timevar = "Country", idvar = "time", ids = row.names(GDP.series),
            times = names(GDP.series),   new.row.names = 1:((dim(GDP.series)[2])*(dim(GDP.series)[1])),direction = "long")

之后的数据看起来像:

    Country     GDP
 1      AT 49149.0
 2      AT 49555.5
 3      AT 49475.9
 4      AT 49507.6
 5      AT 49888.9
 6      AT 50324.5

但这种转换的问题是有关时间段的信息丢失了。我是初学者,并不是所有代码背后的东西对我来说都不够稳定,尤其是这部分:

  "new.row.names = 1:((dim(GDP.series)[2])*(dim(GDP.series)[1])),direction = "long""

所以知道我的问题是如何改进/更改代码,以防数据具有以下格式:

       Country     GDP
2013       AT 49149.0
2012.75    AT 49555.5
2012.5     AT 49475.9
2012.25    AT 49507.6
2011       AT 49888.9
2011.75    AT 50324.5

或者如果我需要使用其他功能?先感谢您。 (代码取自本主题:Data Transformation in R for Panel Regression

【问题讨论】:

  • 欢迎来到 SO!!您能否从您的最终尝试并分享中间结果。我们愿意在这方面为您提供帮助!但请不要指望一切从头开始!
  • 感谢您的评论,我已经更新了我的问题。
  • 数据集面板?你能详细说明一下吗?分享您希望输出的样子?

标签: r time-series panel


【解决方案1】:

这将回答你的问题!但是请记住,数据框的行名必须是唯一的,因此您不能拥有它。检查我的输出:

data = data.frame(AT = 1:6,CZ = 11:16,DE = 21:26)
rownames(data) = c(2013,2012.75, 2012.5  ,2012.25  ,2011,2011.75)
data$row = rownames(data)

library(reshape2)
data1 = melt(data, id.vars = "row", measure.vars = c("AT","CZ","DE"),
     value.name = "GDP", variable.name = "Country")
data1
       row Country GDP
1     2013      AT   1
2  2012.75      AT   2
3   2012.5      AT   3
4  2012.25      AT   4
5     2011      AT   5
6  2011.75      AT   6
7     2013      CZ  11
8  2012.75      CZ  12
9   2012.5      CZ  13
10 2012.25      CZ  14
11    2011      CZ  15
12 2011.75      CZ  16
13    2013      DE  21
14 2012.75      DE  22
15  2012.5      DE  23
16 2012.25      DE  24
17    2011      DE  25
18 2011.75      DE  26

如果您要的是每个国家/地区的数据框列表,请使用 dlply() :

library(plyr)
dlply(data1, .(Country), function(x) {rownames(x) = x$row;x$row = NULL;x})

$AT
        Country GDP
2013         AT   1
2012.75      AT   2
2012.5       AT   3
2012.25      AT   4
2011         AT   5
2011.75      AT   6

$CZ
        Country GDP
2013         CZ  11
2012.75      CZ  12
2012.5       CZ  13
2012.25      CZ  14
2011         CZ  15
2011.75      CZ  16

$DE
        Country GDP
2013         DE  21
2012.75      DE  22
2012.5       DE  23
2012.25      DE  24
2011         DE  25
2011.75      DE  26

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多