【问题标题】:reshape from wide to long, simple data.table issue从宽到长,简单的data.table问题重塑
【发布时间】:2022-02-09 18:44:55
【问题描述】:

我知道必须有一个单行的data.table 解决方案,可能是dcast,但我想不通。

我有这样的数据:

library(data.table)
data1 <- data.table(
  id = seq(1:5),
  code = c("A","A","B","A","B"),
  date = as.Date( c("2021-08-11","2021-01-05","2021-02-18","2021-02-13","2021-12-13" ))
)
data2 <- data.table(
  id = seq(1:5),
  code = c("B","B","A","B","A"),
  date = as.Date( c("2021-08-13","2021-01-05","2021-02-19","2021-02-14","2021-12-13" ))
)
data3 <- rbind(data1, data2)

我只是想重塑成这样的宽格式

data_want <- data.table(
  id = seq(1:5),
  code1 = c("A", "A","B","A","B"),
  data1 = c("2021-08-11", "2021-01-05","2021-02-18","2021-02-13","2021-12-13"),
  code2 = c("B", "B","A","B","A"),
  data2 = c("2021-08-13", "2021-01-05","2021-02-19","2021-02-14","2021-12-13")
)

dcast怎么办?

【问题讨论】:

    标签: r data.table reshape2 melt dcast


    【解决方案1】:

    你也可以像下面这样使用rowid

    dcast(data3, id ~ rowid(id), value.var = c("code", "date"))
    #   id code_1 code_2     date_1     date_2
    #1:  1      A      B 2021-08-11 2021-08-13
    #2:  2      A      B 2021-01-05 2021-01-05
    #3:  3      B      A 2021-02-18 2021-02-19
    #4:  4      A      B 2021-02-13 2021-02-14
    #5:  5      B      A 2021-12-13 2021-12-13
    

    【讨论】:

      【解决方案2】:
      # load package
      library(data.table)
      
      # create batch number
      data3[, batch := 1:.N, id]
      
      # long to wide
      data4 <- dcast(data3
                      , id ~ batch
                      , value.var = c('code', 'date')
                      ); data4
      
         id code_1 code_2     date_1     date_2
      1:  1      A      B 2021-08-11 2021-08-13
      2:  2      A      B 2021-01-05 2021-01-05
      3:  3      B      A 2021-02-18 2021-02-19
      4:  4      A      B 2021-02-13 2021-02-14
      5:  5      B      A 2021-12-13 2021-12-13
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-03
        • 2020-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-25
        • 2014-06-29
        相关资源
        最近更新 更多