如何dcast数据帧

时间:2018-06-11 11:35:35

标签: r data.table

我有一个如下数据框:

poll()

我想按照格式转换它:

   extrovert       introvert      open
      1               2            2
      3               3            2

我使用以下代码将其转换为所需的格式

  extrovert1    extrovert2    extrovert3    introvert1   introvert2   introvert3    open1    open2    open3
      1             0            0             0             1            0           0       1        0  
      0             0            1             0             0            1           0       1        0

但是,它给了我一个错误。我怎么能在R?

中做到这一点

1 个答案:

答案 0 :(得分:1)

(您显然正在使用)的可能解决方案:

setDT(behavior_cluster)

DT <- melt(behavior_cluster[, ri := .I],
           measure.vars = 1:3, variable.factor = FALSE)

DT[, m := max(value), variable
   ][rep(1:nrow(DT), m)
     ][, value := +(value == rowid(ri, variable))
       ][, variable := paste0(variable,seq_along(variable)), by = .(rleid(ri))
         ][, dcast(.SD, ri ~ variable, value.var = 'value')][, ri := NULL][]

给出:

   extrovert1 extrovert2 extrovert3 introvert1 introvert2 introvert3 open1 open2
1:          1          0          0          0          1          0     0     1
2:          0          0          1          0          0          1     0     1

另一种选择,它在open的结果中也得到三列:

DT[rep(1:nrow(DT), max(value))
   ][, value := +(value == rowid(ri, variable))
     ][, variable := paste0(variable, 1:.N), by = .(ri, variable)
       ][, dcast(.SD, ri ~ variable, value.var = 'value')][, ri := NULL][]