【问题标题】:Partially transposing a data frame部分转置数据帧
【发布时间】:2014-09-03 18:46:52
【问题描述】:

我有一个包含如下数据的数据框:

A   B   C   D
a1  b1  c1  d1
a1  b1  c2  d2
a1  b1  c3  d3
a2  b2  c1  d1
a2  b2  c3  d3

我将如何将其转换为?

A   B   c1  c2  c3
a1  b1  d1  d2  d3
a2  b2  d1      d3

【问题讨论】:

    标签: r reshape


    【解决方案1】:

    在base R中,你可以使用reshape():

    reshape(mydf, direction = "wide", idvar = c("A", "B"), timevar = "C")
    #    A  B D.c1 D.c2 D.c3
    # 1 a1 b1   d1   d2   d3
    # 4 a2 b2   d1 <NA>   d3
    

    你也可以同时使用tidyrdplyr,像这样:

    library(dplyr)
    # devtools::install_github("hadley/tidyr")
    library(tidyr)
    mydf %>% group_by(A, B) %>% spread(C, D)
    # Source: local data frame [2 x 5]
    # 
    #    A  B c1 c2 c3
    # 1 a1 b1 d1 d2 d3
    # 2 a2 b2 d1 NA d3
    

    【讨论】:

      【解决方案2】:

      这是使用reshape2 库的好地方。你可以这样做

      library(reshape2)
      dcast(dd, A+B~C)
      

      得到

         A  B c1   c2 c3
      1 a1 b1 d1   d2 d3
      2 a2 b2 d1 <NA> d3
      

      根据需要。

      【讨论】:

        猜你喜欢
        • 2014-08-14
        • 1970-01-01
        • 2021-03-14
        • 2021-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多