将数据重新整形为具有多个变量且R中没有时间变量的面板

时间:2013-07-26 17:45:04

标签: r reshape

我很擅长在R中重塑数据,并且无法弄清楚如何使用reshape()(或其他包)来创建面板数据。每个地理单位有两次时间观测,但每次观测都以变量格式化。例如:

subdistrict <- 1:4
control_t1 <- 5:8
control_t2 <- 9:12
motivation_t1 <- 12:15
motivation_t2 <- 16:19

data_mat <- as.data.frame(cbind(subdistrict, control_t1, control_t2, motivation_t1, motivation_t2))

data_mat
  subdistrict control_t1 control_t2 motivation_t1 motivation_t2
1           1          5          9            12            16
2           2          6         10            13            17
3           3          7         11            14            18
4           4          8         12            15            19

这里,control_t1和control_t2各自指代不同的时段。我的目标是重塑数据,以便可以建立时间变量,并且可以折叠命名变量,以生成以下帧:

  subdistrict time control motivation
1           1            1         12            
1           2            5         16
2           1            2         13            
2           2            6         17
3           1            3         14            
3           2            7         18
4           1            4         15            
4           2            8         19

我不确定如何创建新的时间变量,并折叠和重命名变量以重新整形数据。谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

您只需使用reshape()功能选项direction = "long"即可。这是代码:

district <- 1:4
control_t1 <- 5:8
control_t2 <- 9:12
relax_t1 <- 12:15
relax_t2 <- 16:19
data_mat <- as.data.frame(cbind(district, control_t1, control_t2, relax_t1, relax_t2))
reshape(data = data_mat, direction = "long", idvar = "district", timevar = "time", varying = list(c(2:3), c(4:5)))
#     district time control_t1 relax_t1
# 1.1        1    1          5       12
# 2.1        2    1          6       13
# 3.1        3    1          7       14
# 4.1        4    1          8       15
# 1.2        1    2          9       16
# 2.2        2    2         10       17
# 3.2        3    2         11       18
# 4.2        4    2         12       19

查看R Programming wikibooks了解详情。

答案 1 :(得分:1)

一个简单的答案是将数据框拆分并重新绑定到新表单中,如下所示:

new_Data <- data.frame(
    subdistrict=data_mat[,1],
    control=unlist(data_mat[,2:3]),
    motivation=unlist(data_mat[,4:5]))

我们在这里所做的就是通过使用'unlist'函数将“控制”和“动机”的两列折叠成单列数据,然后将它们全部绑定到一个新的数据框中。 'subdistrict'数据重复,因此没有理由指定它两次。

相关问题