2012-04-03 17 views
9

Necesito crear un data.frame que se completará una fila a la vez por los resultados de un ciclo for. Tiene 45 columnas: los nombres de cinco de ellos son estáticos, pero el resto se leen (como un vector) desde un archivo CSV externo en tiempo de ejecución. Estoy buscando algo en la línea deCrear un data.frame en R con nombres de columna asignados dinámicamente

goalsMenu <- read.csv("Phase 1 goalsmenu.csv", header = TRUE) 
colHeads <- c("analysis","patient","date",as.vector(goalsMenu$Name),"CR") 
output <- data.frame(colHeads) 

sin embargo, esto crea un hoja.de.datos de una columna con el nombre de la columna colHeads.

colHeads <- list("analysis","patient","date",as.vector(goalsMenu$Name),"CR") 

parece un paso en la dirección correcta, pero tengo que "aplanar" para crear la estructura deseada hoja.de.datos

podría aconsejarle por favor?

+0

¿Qué clase necesita cada columna? – mdsumner

Respuesta

8

¿Esto ayuda?

goalsMenu <- paste("Name", 1:40, sep="") 
output <- as.data.frame(matrix(rep(0, 5 + length(goalsMenu)), nrow=1)) 
names(output) <- c("analysis", "patient", "date", goalsMenu, "CR1", "CR2") 

Básicamente, creo un hoja.de.datos output con el número de columnas primera y el nombre de las columnas en el siguiente paso. Sin embargo, ¡tenga en cuenta el comentario de mdsumner! De esta forma, todas las columnas son de la clase numeric. Sin embargo, puede tratar eso más tarde: change the class of columns in data.frame

+0

Gracias - esto ha funcionado (aunque tiene que quitar la primera fila de cero después). Con la excepción (como era de esperar) de la fecha, todas las columnas son numéricas (los dos primeros números de referencia enteros, el resto todas flotan) –

+0

@RobForsyth Ya que dijiste que estás recorriendo las filas para llenar ese data.frame, yo piense que solo tiene que comenzar con la fila uno y reemplazar los ceros allí. Además, esto debería sobrescribir automáticamente la clase de columna. ¿Tu pregunta está respondida? ¿O estás buscando algo más? En caso de que sea el primero, sería bueno si pudieras aceptar la mía o la respuesta de Allan, por lo que esta no está incluida en la lista. De lo contrario, sería genial si pudieras dar más detalles y podría darle otra oportunidad ;-) O quizás alguien más tenga una mejor solución (supongo que hay una). –

+0

lo siento, ¡nuevo en la etiqueta de Stackoverflow! Ahora marcado respondió: ¡gracias de nuevo! –

5

Si puede llenar el marco con (algunos) datos primero, entonces puede simplemente asignarle nombres(). De lo contrario, tendrá que hacer la lista primera (y, posteriormente, convertir a hoja.de.datos):

col.names <- LETTERS[1:10] # Example column names 
data <- vector("list", length(col.names)) 
names(data) <- col.names 
print(str(data))   # Inspect the structure 

Esperanza esto ayuda

Cuestiones relacionadas