我有一个如下数据框:
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?
中做到这一点答案 0 :(得分:1)
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][]