如何广播数据帧

尼尔

我有一个如下数据框:

   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

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

dcast(setDT(behavior_cluster), rowid() ~ extrovert,
      value.var = c("extrovert","introvert","open"))

但是,这给了我一个错误。我如何在R中做到这一点?

夏普

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

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][]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章