【问题标题】:Transpose complex data.frame with tidyR用 tidyR 转置复杂的 data.frame
【发布时间】:2021-01-22 17:48:23
【问题描述】:

我有一个如下所示的示例 data.frame:

rep = c(1,2,3,1,2,3)
day = c(0,0,0,1,1,1)
trt1= c(10,10,20,10,10,20) 
trt2=c(10,10,20,10,10,20) 
trt3 = c(10,10,20,10,10,20) 
exam = data.frame(rep,day,trt1,trt2,trt3)
exam

 rep   day trt1 trt2 trt3
1   1   0   10   10   10
2   2   0   10   10   10
3   3   0   20   20   20
4   1   1   10   10   10
5   2   1   10   10   10
6   3   1   20   20   20

我想用 tidyR 把它带成这种形式

rep  Treatments  0   1   
1        trt1    10  10   
1        trt2    10  10
1        trt3    10  10
2        trt1    10  10
2        trt2    10  10
2        trt3    10  10

我主要把日子作为专栏

感谢任何帮助或指导

【问题讨论】:

    标签: r dplyr tidyverse tidyr


    【解决方案1】:

    也许这会有所帮助:

    library(dplyr)
    library(tidyr)
    #Code
    new <- exam %>%
      pivot_longer(-c(1,2)) %>%
      pivot_wider(names_from = day,values_from=value)
    

    输出:

    # A tibble: 9 x 4
        rep name    `0`   `1`
      <dbl> <chr> <dbl> <dbl>
    1     1 trt1     10    10
    2     1 trt2     10    10
    3     1 trt3     10    10
    4     2 trt1     10    10
    5     2 trt2     10    10
    6     2 trt3     10    10
    7     3 trt1     20    20
    8     3 trt2     20    20
    9     3 trt3     20    20
    

    【讨论】:

    • 你真快:) 那我得用data.table,哈哈。喜欢你的回答!
    • @ThomasIsCoding 有点;)
    【解决方案2】:

    data.table 选项与 dcast + melt

    > dcast(melt(setDT(exam), id = 1:2), rep + variable ~ day)
       rep variable  0  1
    1:   1     trt1 10 10
    2:   1     trt2 10 10
    3:   1     trt3 10 10
    4:   2     trt1 10 10
    5:   2     trt2 10 10
    6:   2     trt3 10 10
    7:   3     trt1 20 20
    8:   3     trt2 20 20
    9:   3     trt3 20 20
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 2017-09-02
      相关资源
      最近更新 更多