0

我是 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

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

4

2 回答 2

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以了解更多信息。

于 2013-07-26T17:55:19.127 回答
1

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

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

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

于 2013-07-26T18:00:59.370 回答