仅转置data.frame中的某些列

仅转置data.frame中的某些列,r,reshape,data-manipulation,R,Reshape,Data Manipulation,这是我的数据: am group v1 v2 v3 v4 1 2015-10-31 A 693 803 700 17% 2 2015-10-31 B 524 859 302 77% 3 2015-10-31 C 266 675 86 7% 4 2015-10-31 D 376 455 650 65% 5 2015-11-30 A 618 715 200 38% 6

这是我的数据

           am   group  v1  v2  v3    v4
1  2015-10-31       A 693 803 700   17%
2  2015-10-31       B 524 859 302   77%
3  2015-10-31       C 266 675 86    7%
4  2015-10-31       D 376 455 650   65%
5  2015-11-30       A 618 715 200   38%
6  2015-11-30       B 249 965 215   54%
7  2015-11-30       C 881 106 184   24%
8  2015-11-30       D 033 047 492   46%
9  2015-12-31       A 229 994 720   19%
10 2015-12-31       B 539 543 332   57%
11 2015-12-31       C 100 078 590   24%
12 2015-12-31       D 517 413 716   57%
问题: 我如何转换数据以便

  • 转置
    v1-v4
  • am
    中的值作为列变量
  • group
    变量由
    v1-v4
  • 我想得出的结果是:

    group metric 2015-10-31 2015-11-30 2015-12-31
        A     v1        693        618        229
        A     v2        803        715        994 
        A     v3        700        200        720
        A     v4        17%        38%        19%
        B     v1        524        249        539
        B     v2        859        965        543 
        B     v3        302        215        332
        B     v4        77%        54%        57%
        ...
    
    到目前为止我所尝试的:

    name <- mydata$am
    data <- as.data.frame(t(mydata[, -1]))
    colnames(mydata) <- name
    

    name基本思想是先使用“长”格式,然后使用“宽”格式

    这里有一些方法可以做到这一点

    melt
    +
    dcast

    library(data.table) ## or library(reshape2)
    dcast(melt(as.data.table(mydf), id.vars = c("am", "group")), 
          group + variable ~ am, value.var = "value")
    
    library(dplyr)
    library(tidyr)
    
    mydf %>%
      gather(key, value, v1:v4) %>%
      spread(am, value)
    
    reshape(cbind(mydf[c(1, 2)], stack(mydf[-c(1, 2)])), 
            direction = "wide", idvar = c("group", "ind"), timevar = "am")
    
    重铸

    library(data.table) ## or library(reshape2)
    dcast(melt(as.data.table(mydf), id.vars = c("am", "group")), 
          group + variable ~ am, value.var = "value")
    
    library(dplyr)
    library(tidyr)
    
    mydf %>%
      gather(key, value, v1:v4) %>%
      spread(am, value)
    
    reshape(cbind(mydf[c(1, 2)], stack(mydf[-c(1, 2)])), 
            direction = "wide", idvar = c("group", "ind"), timevar = "am")
    
    (基本上与上述相同,但只需一步。)

    聚集
    +
    分散

    library(data.table) ## or library(reshape2)
    dcast(melt(as.data.table(mydf), id.vars = c("am", "group")), 
          group + variable ~ am, value.var = "value")
    
    library(dplyr)
    library(tidyr)
    
    mydf %>%
      gather(key, value, v1:v4) %>%
      spread(am, value)
    
    reshape(cbind(mydf[c(1, 2)], stack(mydf[-c(1, 2)])), 
            direction = "wide", idvar = c("group", "ind"), timevar = "am")
    
    重塑

    library(data.table) ## or library(reshape2)
    dcast(melt(as.data.table(mydf), id.vars = c("am", "group")), 
          group + variable ~ am, value.var = "value")
    
    library(dplyr)
    library(tidyr)
    
    mydf %>%
      gather(key, value, v1:v4) %>%
      spread(am, value)
    
    reshape(cbind(mydf[c(1, 2)], stack(mydf[-c(1, 2)])), 
            direction = "wide", idvar = c("group", "ind"), timevar = "am")
    

    是否确实要在生成的数据集中混合数据类型?这似乎是个坏主意。我正在为
    htmlTable
    准备一个表输出。