我很擅长在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
我不确定如何创建新的时间变量,并折叠和重命名变量以重新整形数据。谢谢你的帮助。
答案 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'数据重复,因此没有理由指定它两次。