我正在努力将一个面板数据集从宽格式转换为长格式。数据集如下:
ID | KP1_430a | KP1_430b | KP1_430c | KP2_430a | KP2_430b | KP2_430c | KP1_1500a | ...
1 ....
2 ....
KP1; KP2 到 KP7 描述了波浪。
a,b 到 f 描述了一个特定的项目。(例如,派对 A 的从左到右的放置)
我希望将这些数据转换为长格式。就像这样:
ID | Party | Wave | 430 | 1500
1 1 1 .. ..
1 2 1 .. ..
. . .
1 1 2 .. ..
. . .
2 1 1 .. ..
我尝试使用reshape函数。但是我在同时重塑时间和各个方面时遇到了问题。
以下是一个小的数据框示例。
data <- data.frame(matrix(rnorm(10),2,10))
data[,1] <- 1:2
names(data) <- c("ID","KP1_430a" , "KP1_430b" , "KP1_430c" , "KP2_430a" , "KP2_430b ", "KP2_430c ", "KP1_1500a" ,"KP1_1500b", "KP1_1500c")
这是我到目前为止的进展。
data_long <- reshape(data,varying=list(names(data)[2:4],names(data)[5:7], names(data[8:10]),
v.names=c("KP1_430","KP2_430","KP1_1500"),
direction="long", timevar="Party")
问题在于:如何以长格式获取时变变量?是否有更优雅的方法来重塑这个数据?在上面的代码中,我必须为每个波和变量输入名称(names(data)[2:4])。对于这个小数据框来说还好,但数据集要大得多。
编辑:如何手动完成此转换:实际上我已经完成了这个过程,但留下了一个长达一页的代码文件。
首先,将KP1_430a和KP1_1500a与ID、Time=1和Party=1列绑定。其次,为所有党派[b-f]创建相同的对象,分别更改党派索引,并按行附加它们。依次对剩余的波[2-7]执行步骤一和步骤二,分别更改党派和时间变量,并逐行附加它们。