2010-09-06 19 views

Respuesta

11

No diría que es la solución más elegante y bonita que existe, pero hace el trabajo bien. Observe que cada fila de dataframe lleva su propio nombre de fila, lo que se convierte en un problema al insertar nuevas líneas. Dicho esto, puede reparar esto con row.names (ver a continuación).

my.df <- data.frame(a = runif(10), b = runif(10), c = runif(10)) 
my.vec <- c(1, 1, 1) 
new.df <- rbind(my.df[1:5, ], my.vec, my.df[6:nrow(my.df), ]) 
new.df 
      a   b   c 
1 0.45433791 0.3798105 0.84514864 
2 0.07074529 0.4985765 0.53912585 
3 0.09645574 0.5441647 0.96636213 
4 0.60788436 0.6070706 0.53791603 
5 0.01593911 0.1697248 0.62697924 
6 1.00000000 1.0000000 1.00000000 
61 0.98455694 0.2206702 0.85500531 
7 0.85356834 0.5279596 0.27462326 
8 0.48028935 0.6689572 0.05428349 
9 0.95675901 0.6875491 0.77642924 
10 0.24691330 0.7980741 0.24013096 

row.names(new.df) <- 1:nrow(new.df) # make row names pretty again 
+0

Puede hacer los nombres de las filas en 'rbind' con el argumento' make.row.names = FALSE' –

1

Hacer una trama de datos de I a partir del vector, horizontal

La idea clave es utilizar el método de transposición R: t(...) transponer el vector antes de pasarlo a la data.frame constructor.

my_name_vector  = c("penguin1", "penguin2", "penguin3", "penguin4"); 
my_data_vector  = c("Skipper", "Kowalski", "Rico",  "Private"); 
supplemental_vector = c("Mumble", "Dorthy", "Norma", "Memphis"); 

#create a data frame out of a transposed vector 
penguins = as.data.frame(t(my_data_vector)); 
#change the names of the dataframe to be the titles 
colnames(penguins) <- my_name_vector; 

supplemental_data_frame <- data.frame(t(supplemental_vector)); 
colnames(supplemental_data_frame) <- my_name_vector; 
supplemental_data_frame; 

#rbind means row bind, pass in two data.frame 
penguins <- rbind(penguins, supplemental_data_frame); 
penguins; 

Lienzo:

penguin1 penguin2 penguin3 penguin4 
1 Mumble Dorthy Norma Memphis 

    penguin1 penguin2 penguin3 penguin4 
1 Skipper Kowalski Rico  Private 
2 Mumble Dorthy Norma Memphis 

El método rbind es muy ineficiente, por lo que si usted está haciendo esto más de unos pocos cientos de filas, que espera que esperar mucho tiempo. Si tiene que ser rápido como un rayo, entonces necesita comprobar la validez de asignar espacio o utilizar el método de lista como se muestra aquí: https://stackoverflow.com/a/20689857/445131

1

rbind es buena, pero muy difícil sin embargo como para manejar el número de fila exacta antes y después. Una forma más rápida es usar insertRow en el paquete miscTools.

En el ejemplo anterior conjunto de datos, el código sería:

my.df <- as.matrix(data.frame(a = runif(10), b = runif(10), c = runif(10))) 
my.vec <- c(1, 1, 1) 
new.df <- insertRow(my.df,7,my.vec) 
new.df 

Esperanza sería de gran ayuda.

+0

¡Eso es MUCHO MEJOR que rbind! ¡Gracias! – Rodrigo

Cuestiones relacionadas