【问题标题】:reshape a data set based on one variable基于一个变量重塑数据集
【发布时间】:2014-04-17 16:22:44
【问题描述】:

我有一个如下数据集:

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 中做到这一点?

【问题讨论】:

    标签: r reshape


    【解决方案1】:

    编辑

    使用更新后的数据,将代码更改为如下所示。概念完全相同相同:

    在基础 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")
    

    如上添加“时间”变量后使用“reshape2”:

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

    原答案

    添加一个“时间”变量,一切顺利:

    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
    

    或者,在我们上面添加“times”变量后,您可以使用“reshape2”包进一步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
    

    【讨论】:

    • 当我添加变量“时间”时,我收到以下错误--[&lt;-.factor(*tmp*, i, value = integer(0)) 中的错误:替换长度为零
    • @Lawrence,如果您的问题中没有可重复的示例,我将无法为您提供帮助。此解决方案适用于您目前所展示的内容。
    • 如何将 csv 文件附加到此线程,以便向您展示数据的样子/。
    • @Lawrence,您能否将其编辑为您的原始问题。此外,最好使用dput(head(mydata)) 或类似的东西,因为这也会保留有关列类型的信息。
    猜你喜欢
    • 2021-09-23
    • 1970-01-01
    • 2016-05-19
    • 2016-12-23
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多