将数据框从宽范围重塑为具有多个变量和一些时间不变的面板
这是Stata一步处理的数据分析中的一个基本问题。
使用 2000 年和 2005 年的时不变数据 (x0) 和时变数据 (x1,x2) 创建一个宽数据框:
d1 <- data.frame(subject = c("id1", "id2"),
x0 = c("male", "female"),
x1_2000 = 1:2,
x1_2005 = 5:6,
x2_2000 = 1:2,
x2_2005 = 5:6
)
st
subject x0 x1_2000 x1_2005 x2_2000 x2_2005
1 id1 male 1 5 1 5
2 id2 female 2 6 2 6
我想将其形状像面板一样,因此数据如下所示:
subject x0 time x1 x2
1 id1 male 2000 1 1
2 id2 female 2000 2 2
3 id1 male 2005 5 5
4 id2 female 2005 6 6
我可以使用 执行此操作reshape
st
d2 <-reshape(d1,
idvar="subject",
varying=list(c("x1_2000","x1_2005"),
c("x2_2000","x2_2005")),
v.names=c("x1","x2"),
times = c(2000,2005),
direction = "long",
sep= "_")
我主要担心的是,当你有几十个变量时,上面的命令会变得很长。在 stata
中,只需输入:
reshape long x1 x2, i(subject) j(year)
R 中有这样简单的解决方案吗?
This is a basic problem in data analysis which Stata deals with in one step.
Create a wide data frame with time invariant data (x0) and time varying data for years 2000 and 2005 (x1,x2):
d1 <- data.frame(subject = c("id1", "id2"),
x0 = c("male", "female"),
x1_2000 = 1:2,
x1_2005 = 5:6,
x2_2000 = 1:2,
x2_2005 = 5:6
)
s.t.
subject x0 x1_2000 x1_2005 x2_2000 x2_2005
1 id1 male 1 5 1 5
2 id2 female 2 6 2 6
I want to shape it like a panel so data looks like this:
subject x0 time x1 x2
1 id1 male 2000 1 1
2 id2 female 2000 2 2
3 id1 male 2005 5 5
4 id2 female 2005 6 6
I can do this with reshape
s.t.
d2 <-reshape(d1,
idvar="subject",
varying=list(c("x1_2000","x1_2005"),
c("x2_2000","x2_2005")),
v.names=c("x1","x2"),
times = c(2000,2005),
direction = "long",
sep= "_")
My main concern is that when you have dozens of variables the above command gets very long. In stata
one would simply type:
reshape long x1 x2, i(subject) j(year)
Is there such a simple solution in R?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
reshape
可以猜测它的许多参数。在这种情况下,指定以下内容就足够了。没有使用任何包。给予:
reshape
can guess many of its arguments. In this case it's sufficient to specify the following. No packages are used.giving:
这是一个使用 reshape2 包的简短示例:
现在您甚至不需要指定 x1 和 x2。
如果变量增加,此代码将起作用:
here is a brief example using reshape2 package:
now you don't need even specifying x1 and x2.
This code works if variables increase: