Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将时间序列重塑为r中的面板_R_Time Series_Panel - Fatal编程技术网

将时间序列重塑为r中的面板

将时间序列重塑为r中的面板,r,time-series,panel,R,Time Series,Panel,现在我有3个国家的时间序列GDP数据。我想为dataset创建一个面板,用于进一步的面板分析。我不知道如何创建它重塑包一个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 2

现在我有3个国家的时间序列GDP数据。我想为dataset创建一个面板,用于进一步的面板分析。我不知道如何创建它重塑包一个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")
但这种转变的问题是关于时间周期的信息丢失了。我是一名初学者,并不是所有代码背后的内容对我来说都是可以理解的,尤其是这一部分:

  "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 = 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():


嘿,欢迎来到SO!!你能从你这边开始尝试并分享中间结果吗。我们愿意在这方面帮助你!但请不要指望一切从头开始!谢谢你的评论,我已经更新了我的问题。数据集的面板?你能详细说明一下吗?分享您希望输出的样子?
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
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