[英]Reshape Panel Data Wide Format to Long Format
我正在努力将Panel数据集从宽格式转换为长格式。 数据集看起来像这样:
ID | KP1_430a | KP1_430b | KP1_430c | KP2_430a | KP2_430b | KP2_430c | KP1_1500a | ...
1 ....
2 ....
KP1; KP2直到KP7描述了波浪。 a,b到f描述特定的项目。 (例如,甲方从左到右的位置)
我想以长格式提供这些数据。 像这样:
ID | Party | Wave | 430 | 1500
1 1 1 .. ..
1 2 1 .. ..
. . .
1 1 2 .. ..
. . .
2 1 1 .. ..
我试着使用重塑功能。 但是,随着时间的推移和同时对各方进行重塑,我遇到了问题。
这是一个小的data.frame示例。
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")
问题仍然存在:如何以长格式获取时变变量? 是否有更优雅的方式来重塑这些数据? 在上面的代码中,我必须输入每个wave和变量的名称(名称(数据)[2:4])。 有了这个小的data.frame就可以,但数据集要大得多。
编辑:如何手动完成这个转换:我实际上已经完成了这个,这留下了一个页面长的代码文件。
首先,绑定KP1_430a和KP1_1500a,ID为ID,Time = 1,Party = 1列。 其次为所有各方[bf]创建相同的对象,分别更改派对索引,并逐行追加。 对其余的波[2-7]执行第一步和第二步,分别更改party和time var,并按顺序追加它们。
通常更容易分两步进行:首先使用melt
将数据置于“高”格式(除非已经是这种情况),然后使用dcast
将ti转换为更宽的格式。
library(reshape2)
library(stringr)
# Tall format
d <- melt(data, id.vars="ID")
# Process the column containing wave and party
d1 <- str_match_all(
as.character( d$variable ),
"KP([0-9])_([0-9]+)([a-z])"
)
d1 <- do.call( rbind, d1 )
d1 <- d1[,-1]
colnames(d1) <- c("wave", "number", "party")
d1 <- as.data.frame( d1)
d <- cbind( d, d1 )
# Convert to the desired format
d <- dcast( d, ID + wave + party ~ number )
目前,您的Wave数据位于变量名称中,您需要通过一些字符串处理来提取它。 我融化没有问题
mdat <- melt(data, id.vars="ID")
mdat$wave=sub("KP", "", sub("_.+$", "", mdat$variable)) # remove the other stuff
mdat
你的描述太粗略了(到目前为止)让我弄清楚推导出一个“派对”变量的规则,所以也许你可以编辑你的问题来展示一个人怎么做......然后我们就可以了向计算机展示如何做到这一点。
编辑:如果原始列名中的最后一个小写字母是Vincent认为的Party,则可以修剪这些名称中的尾随空格并提取:
mdat$var <- sub("\\s", "", (as.character(mdat$variable)))
mdat$party=substr( mdat$var, nchar(mdat$var), nchar(mdat$var))
#--------------
> mdat
ID variable value wave party var
1 1 KP1_430a 0.7220627 1 a KP1_430a
2 2 KP1_430a 0.9585243 1 a KP1_430a
3 1 KP1_430b -1.2954671 1 b KP1_430b
4 2 KP1_430b 0.3393617 1 b KP1_430b
5 1 KP1_430c -1.1477627 1 c KP1_430c
6 2 KP1_430c -1.0909179 1 c KP1_430c
<snipped output>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.