Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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_Panel_Regression_Reshape - Fatal编程技术网

面板回归R中的数据转换

面板回归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 ... ... 我真的很难进行这种转换,我现在真的很沮丧,也就是说,

我真的需要你的帮助来解决一个对你来说似乎很容易解决的问题

目前我在一个项目中工作,该项目涉及一些面板回归。我有几个大的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 ... ...
我真的很难进行这种转换,我现在真的很沮丧,也就是说,我从哪里获得标识符和时间索引? 如果您能为我提供如何解决这个问题的信息,我将不胜感激

如果我的问题你不清楚,就问吧

致以最良好的问候和感谢

输出应如下所示:

 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