【问题标题】:transpose/reshape with customised names使用自定义名称转置/重塑
【发布时间】:2018-12-30 09:27:25
【问题描述】:

创建所需的样本:

require(pacman)
p_load(data.table)
DT_start <- data.table(ID = c(1,1,1,2,2,2), valueA = c("a1","a2","a3","b1","b2","b3"), valueB = c("A1","A2","A3","B1","B2","B3"))
DT_end <- data.table(ID = c(1,2)
                     , T01_valueA = c("a1","b1")
                     , T02_valueA = c("a2","b2")
                     , T03_valueA = c("a3","b3")
                     , T01_valueB = c("A1","B1")
                     , T02_valueB = c("A2","B2")
                     , T03_valueB = c("A3","B3"))
setcolorder(DT_end, c("ID","T01_valueA","T01_valueB","T02_valueA","T02_valueB","T03_valueA","T03_valueB"))

我有:

> DT_start
   ID valueA valueB
1:  1     a1     A1
2:  1     a2     A2
3:  1     a3     A3
4:  2     b1     B1
5:  2     b2     B2
6:  2     b3     B3

我需要:

> DT_end
   ID T01_valueA T01_valueB T02_valueA T02_valueB T03_valueA T03_valueB
1:  1         a1         A1         a2         A2         a3         A3
2:  2         b1         B1         b2         B2         b3         B3

如何实现呢?基本上将 DT_start 转换为 DT_end 自定义名称:T01, T02, T03...

【问题讨论】:

    标签: r data.table reshape transpose


    【解决方案1】:

    使用末尾注释中的输入DT,我们在ID 列s 中创建一个序列,将其熔化为长格式,然后将其转换回所需的宽格式。 (dcast 公式也可以写成ID ~ s + variable。)

    library(data.table)
    
    DT[, s := sprintf("T%02d", seq_along(.I)), ID]
    m <- melt(DT, id.vars = c("ID", "s"))
    dcast(m, ID ~ ...)
    

    给予:

       ID T01_valueA T01_valueB T02_valueA T02_valueB T03_valueA T03_valueB
    1:  1         a1         A1         a2         A2         a3         A3
    2:  2         b1         B1         b2         B2         b3         B3
    

    注意:

    使用的输入:

    library(data.table)
    
    DF <- structure(list(ID = c(1L, 1L, 1L, 2L, 2L, 2L), valueA = c("a1", 
     "a2", "a3", "b1", "b2", "b3"), valueB = c("A1", "A2", "A3", "B1", 
     "B2", "B3")), class = "data.frame", 
     row.names = c(NA, -6L))
    DT <- as.data.table(DF)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      相关资源
      最近更新 更多