r dataframe

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.