Tengo un marco de datos R que contiene un factor que quiero "expandir" para que para cada nivel de factor, haya una columna asociada en un nuevo marco de datos, que contiene un indicador 1/0. Por ejemplo, supongamos que tengo:Expande automáticamente un factor R en una colección de variables de indicador 1/0 para cada nivel de factor
df.original <-data.frame(eggs = c("foo", "foo", "bar", "bar"), ham = c(1,2,3,4))
Quiero:
df.desired <- data.frame(foo = c(1,1,0,0), bar=c(0,0,1,1), ham=c(1,2,3,4))
Porque para algunos análisis para el que es necesario tener una trama de datos completamente numérico (por ejemplo, análisis de componentes principales), pensé que esta característica podría ser incorporado. Escribir una función para hacer esto no debería ser demasiado difícil, pero puedo prever algunos desafíos relacionados con los nombres de columna y si algo existe ya, preferiría usar eso.
¿Puedo simplemente agregar que este método es mucho más rápido que usar 'cast' para mí. –
@RyanChase, en las 14 horas transcurridas entre la redacción de tu comentario y que yo lo haya notado para responder, podrías haber consultado la página de ayuda '?formula' y encontró la respuesta en el segundo párrafo de la sección de Detalles. O podría haber intentado el código con y sin el "-1" y comparar la salida para ver los efectos. Pero supongo que eres más paciente que yo. El "-1" especifica que no se ajusta a una intersección (hay otras formas también) y, por lo tanto, crea una variable indicadora para cada nivel en lugar de diferencias basadas en contrastes. –
@GregSnow Repasé el segundo párrafo de '? Formula' así como'? Model.matrix', pero no estaba claro (podría ser simplemente mi falta de profundidad de conocimiento en álgebra matricial y formulación de modelos). Después de excavar más, he podido deducir que el -1 solo especifica que no se incluya la columna "interceptar". Si omite el -1, verá una columna de intercepción de 1 en el resultado con una columna binaria omitida. Puede ver qué valores la columna omitida son 1 en función de las filas donde los valores de las otras columnas son 0. La documentación parece críptica: ¿hay otro buen recurso? –