使用多个变量和一些时间不变的从宽到面板 reshape 数据框

标签 r panel stata reshape data-manipulation

这是Stata一步处理的数据分析中的一个基本问题。

创建一个包含时不变数据 (x0) 和 2000 年和 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    
) 

英石。
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 做到这一点英石。
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中有这么简单的解决方案吗?

最佳答案

reshape可以猜出它的许多论点。在这种情况下,指定以下内容就足够了。不使用任何包。

 reshape(d1, dir = "long", varying = 3:6, sep = "_")

给予:
       subject     x0 time x1 x2 id
1.2000     id1   male 2000  1  1  1
2.2000     id2 female 2000  2  2  2
1.2005     id1   male 2005  5  5  1
2.2005     id2 female 2005  6  6  2

关于使用多个变量和一些时间不变的从宽到面板 reshape 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5287062/

相关文章:

r - 在 R 中一次生成多个频率表

stata - .ado 程序中可选字符串选项的默认值

r - 如何在 R 或 Stata 中绘制相对频率

统计Stata中的唯一值

将列重命名为 Y X1 X2 X3 X4 .. XN

r - 以编程方式将值发送到过滤器的 tidyeval 方法

替换基于数据框列表的数据框的列值

c# - c#中的图形面板

c# - 当鼠标聚焦在面板范围内时添加事件

silverlight - UserControl子控件和FindName