我有一个如下数据框:
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中做到这一点?
使用data.table(您显然正在使用)的可能解决方案:
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] 删除。
我来说两句