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