【问题标题】:Reshape data from wide to long? [duplicate]从宽到长重塑数据? [复制]
【发布时间】:2012-12-01 19:24:27
【问题描述】:

如何重塑这些广泛的数据:(来自 csv 文件)

Name    Code    Indicator     1960    1961    1962  

进入这种长格式?

Name    Code    Indicator     Year

【问题讨论】:

    标签: r


    【解决方案1】:

    reshape2 包通过函数 melt 很好地完成了这一点。

    yourdata_melted <- melt(yourdata, id.vars=c('Name', 'Code', 'Indicator'), variable.name='Year')
    

    这将添加一列value,您可以删除它。 yourdata_melted$value &lt;- NULL

    【讨论】:

      【解决方案2】:

      仅仅因为我喜欢继续使用基本 R 函数的活动:

      测试数据:

      test <- data.frame(matrix(1:12,nrow=2))
      names(test) <- c("name","code","indicator","1960","1961","1962")
      test
      
        name code indicator 1960 1961 1962
      1    1    3         5    7    9   11
      2    2    4         6    8   10   12
      

      现在重塑它!

      reshape(
         test,
         idvar=c("name","code","indicator"),
         varying=c("1960","1961","1962"),
         timevar="year",
         v.names="value",
         times=c("1960","1961","1962"),
         direction="long"
      )
      
      #           name code indicator year value
      #1.3.5.1960    1    3         5 1960     7
      #2.4.6.1960    2    4         6 1960     8
      #1.3.5.1961    1    3         5 1961     9
      #2.4.6.1961    2    4         6 1961    10
      #1.3.5.1962    1    3         5 1962    11
      #2.4.6.1962    2    4         6 1962    12
      

      【讨论】:

      • 我也尝试为 base R reshape 进行宣传--它的速度很快,而且在你使用过几次之后也不太难使用--但它看起来像“reshape2”中的功能" 包是唯一能得到爱的。
      • 加 1 只是为了争取基本 R 功能的努力。
      【解决方案3】:

      tidyr

      gather(test, "time", "value", 4:6)
      

      数据

      test <- data.frame(matrix(1:12,nrow=2))
      names(test) <- c("name","code","indicator","1960","1961","1962")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-04
        相关资源
        最近更新 更多