基于一个变量重塑数据集

时间:2014-04-17 16:22:44

标签: r reshape

我有一个如下数据集:

Prefix  Ric Mrkt_segmt  Exchange
22  122N    E   NYM
22  222N    P   NYM
22  22N C   NYM
23  123L    E   NYM
23  223L    P   NYM
23  23L P   NYM
23  23L C   NYM
26  126L    E   NYM
26  226L    P   NYM
26  26L C   NYM

我想重塑这些数据,因此它看起来像这样:

  prefix exchange ric_root1  mrkt_segmt1 ric_root2 mrkt_segmt2  ric_root3 mrkt3
   22       NYM      122N       E           222N      P              22N     C
   23       NYM      123L       E           223L      P               

和exchange_prefix和exchange的组合是唯一的ID

我怎么能在R?中做到这一点?

1 个答案:

答案 0 :(得分:0)

修改

使用更新的数据,将代码更改为以下内容。概念 完全 相同:

在基地R:

mydf$time <- with(mydf, ave(rep(1, nrow(mydf)), 
                            Prefix, Exchange, FUN = seq_along))
reshape(mydf, direction = "wide", 
        idvar=c("Prefix", "Exchange"), 
        timevar="time")

使用&#34; reshape2&#34;添加&#34;时间&#34;变量如上:

library(reshape2)
dfL <- melt(mydf, id.vars=c("Prefix", "Exchange", "time"))
dcast(dfL, Prefix + Exchange ~ variable + time)

原始答案

添加&#34;时间&#34;变量,你很高兴:

mydf$times <- ave(mydf$ID, mydf$ID, FUN = seq_along)
reshape(mydf, idvar="ID", timevar="times", direction = "wide")
#   ID Var1.1 Var2.1 Var1.2 Var2.2
# 1  1      A      X      B      Y
# 3  2      C      X      D      Y
# 5  3      E      X      F      Y

或者,在添加&#34;次&#34;如上所述,您可以使用&#34; reshape2&#34;打包以进一步melt您的数据,然后重新塑造它:

dfL <- melt(mydf, id.vars=c("ID", "times"))
dcast(dfL, ID ~ variable + times)
#   ID Var1_1 Var1_2 Var2_1 Var2_2
# 1  1      A      B      X      Y
# 2  2      C      D      X      Y
# 3  3      E      F      X      Y