Dividir una columna en mĂșltiples columnas ficticias binarias
dataframe (1)
Podemos usar
mtabulate
de
qdapTools
después de dividir (
strsplit(..
) la columna ''características''.
library(qdapTools)
cbind(sampledf[1],mtabulate(strsplit(as.character(sampledf$features), '':'')))
# vin f1 f2 f3 f4 f5
#1 v1 1 1 1 0 0
#2 v2 0 1 0 1 1
#3 v3 1 0 0 1 1
O podemos usar
cSplit_e
de la
library(splitstackshape)
library(splitstackshape)
df1 <- cSplit_e(sampledf, ''features'', '':'', type= ''character'', fill=0, drop=TRUE)
names(df1) <- sub(''.*_'', '''', names(df1))
O usando métodos de
base R
, nos
split
como antes, establecemos los nombres de los elementos de la
list
desde el
strsplit
con la columna ''vin'', la convertimos en una columna de clave / valor ''data.frame'' usando
stack
, obtenemos la
table
, transponemos y
cbind
con la primera columna de ''sampleledf''.
cbind(sampledf[1],
t(table(stack(setNames(strsplit(as.character(sampledf$features), '':''),
sampledf$vin)))))
Esta pregunta ya tiene una respuesta aquí:
Estoy tratando de dividir una sola variable de "carácter" en mi marco de datos en múltiples variables de "factor".
> sampledf=data.frame(vin=c(''v1'',''v2'',''v3''),features=c(''f1:f2:f3'',''f2:f4:f5'',''f1:f4:f5''))
> sampledf
vin features
1 v1 f1:f2:f3
2 v2 f2:f4:f5
3 v3 f1:f4:f5
> desireddf=data.frame(vin=c(''v1'',''v2'',''v3''),f1=c(1,0,1),f2=c(1,1,0),f3=c(1,0,0),f4=c(0,1,1),f5=c(0,1,1))
> desireddf
vin f1 f2 f3 f4 f5
1 v1 1 1 1 0 0
2 v2 0 1 0 1 1
3 v3 1 0 0 1 1
He intentado usar
strsplit()
para separar la columna "características"
strsplit(as.character(df$features), ";")
pero no he tenido suerte factorizándolos.