面板回归R中的数据转换
我真的需要你的帮助来解决一个对你来说似乎很容易解决的问题 目前我在一个项目中工作,该项目涉及一些面板回归。我有几个大的csv文件(每张多达1200万个条目),其格式如所附图片所示,而列(V1、V2)是单独的,行(1、2、3)是时间标识符 为了使用面板回归R中的数据转换,r,panel,regression,reshape,R,Panel,Regression,Reshape,我真的需要你的帮助来解决一个对你来说似乎很容易解决的问题 目前我在一个项目中工作,该项目涉及一些面板回归。我有几个大的csv文件(每张多达1200万个条目),其格式如所附图片所示,而列(V1、V2)是单独的,行(1、2、3)是时间标识符 为了使用plm()-函数,我需要将所有这些文件转换为以下数据结构: ID Time X1 X2 1 1 x1 x2 1 2 x1 x2 1 ... ... ... 2 1 x1 x2 2 2 ... ... 我真的很难进行这种转换,我现在真的很沮丧,也就是说,
plm()
-函数,我需要将所有这些文件转换为以下数据结构:
ID Time X1 X2
1 1 x1 x2
1 2 x1 x2
1 ... ... ...
2 1 x1 x2
2 2 ... ...
我真的很难进行这种转换,我现在真的很沮丧,也就是说,我从哪里获得标识符和时间索引?
如果您能为我提供如何解决这个问题的信息,我将不胜感激
如果我的问题你不清楚,就问吧
致以最良好的问候和感谢
输出应如下所示:
mydata<-structure(list(V1 = 10:13, V2 = 21:24, V3 = c(31L, 32L, 3L, 34L
)), .Names = c("V1", "V2", "V3"), class = "data.frame", row.names = c(NA,
-4L))
> mydata
V1 V2 V3
1 10 21 31
2 11 22 32
3 12 23 3
4 13 24 34
这里有一个替代方案:使用我的“splitstackshape”软件包中的
堆叠
在这里,它应用于@Metrics的样本数据:
# install.packages("splitstackshape")
library(splitstackshape)
Stacked(cbind(id = 1:nrow(mydata), mydata),
id.vars="id", var.stubs="V", sep = "V")
# id .time_1 V
# 1: 1 1 10
# 2: 1 2 21
# 3: 1 3 31
# 4: 2 1 11
# 5: 2 2 22
# 6: 2 3 32
# 7: 3 1 12
# 8: 3 2 23
# 9: 3 3 3
# 10: 4 1 13
# 11: 4 2 24
# 12: 4 3 34
如果你的数据很大,速度会很快。以下是链接到的12MB数据集的速度。排序不同,但数据相同
它仍然没有比stack
更快(但在某个时候,stack
开始减速)
请参阅下面的系统时间s:
重塑()
stack()
system.time(out3这就是它应该是什么样子:你可以使用reforme2
package谢谢你的回答,因为我没有时间或标识符变量,代码会是什么样子?你需要dput
作为一个文件的样本数据的再现性。它们都有类似的结构。每列都是一个时间序列,用于个人很高兴它对你有用。请考虑接受答案,以便未来的用户可能会发现它有用。+ 1。<代码> PRD(DIM(MyDATA))< /C>比“代码>(DIM(MyDATA)[2)] *(DIM(MyDATA)〔1〕)要清晰得多。
。在我看来,时间
和id
变量与我的预期相反。@Metrics,您可能还想查看我的“splitstackshape”包。看。@Ananda:你说得对。这里正好相反。我会研究一下。谢谢。我的观察是,堆栈
是超高速的,因为它使用的是数据。表
。正确吗?@Metrics,堆栈
(我的函数)在数据中使用取消列表
。表
堆栈
是纯基R。感谢@Ananda的澄清。
# install.packages("splitstackshape")
library(splitstackshape)
Stacked(cbind(id = 1:nrow(mydata), mydata),
id.vars="id", var.stubs="V", sep = "V")
# id .time_1 V
# 1: 1 1 10
# 2: 1 2 21
# 3: 1 3 31
# 4: 2 1 11
# 5: 2 2 22
# 6: 2 3 32
# 7: 3 1 12
# 8: 3 2 23
# 9: 3 3 3
# 10: 4 1 13
# 11: 4 2 24
# 12: 4 3 34
system.time(out <- reshape(x, idvar = "time", ids = row.names(x),
times = names(x), timevar = "id",
varying = list(names(x)),
v.names="value",
new.row.names = 1:prod(dim(x)),
direction = "long"))
# user system elapsed
# 53.11 0.00 53.11
head(out)
# id value time
# 1 V1 0.003808635 1
# 2 V1 -0.018807416 2
# 3 V1 0.008875447 3
# 4 V1 0.001148695 4
# 5 V1 -0.019365004 5
# 6 V1 0.012436560 6
system.time(out2 <- Stacked(cbind(id = 1:nrow(x), x),
id.vars="id", var.stubs="V",
sep = "V"))
# user system elapsed
# 0.30 0.00 0.29
out2
# id .time_1 V
# 1: 1 1 0.003808635
# 2: 1 10 -0.014184635
# 3: 1 100 -0.013341843
# 4: 1 101 0.006784138
# 5: 1 102 0.006463707
# ---
# 963868: 2317 95 0.009569451
# 963869: 2317 96 0.002497771
# 963870: 2317 97 0.009202519
# 963871: 2317 98 0.017007545
# 963872: 2317 99 -0.002495842
system.time(out3 <- cbind(id = 1:nrow(x), stack(x)))
# user system elapsed
# 0.09 0.00 0.09
head(out3)
# id values ind
# 1 1 0.003808635 V1
# 2 2 -0.018807416 V1
# 3 3 0.008875447 V1
# 4 4 0.001148695 V1
# 5 5 -0.019365004 V1
# 6 6 0.012436560 V1