2010-03-30 5 views
40

que tienen una trama de datos con entradas numéricas como ésteLa conversión de una trama de datos a un vector (por filas)

test <- data.frame(x=c(26,21,20),y=c(34,29,28)) 

¿Cómo puedo obtener el siguiente vector?

> 26,34,21,29,20,28 

que era capaz de conseguir que el uso de los siguientes, pero supongo que debe haber una manera mucho más elegante

X <- test[1,] 
for (i in 2:dim(test)[1]){ 
X <- cbind(X,test[i,]) 
} 

Respuesta

91

Puede intentar as.vector(t(test)). Tenga en cuenta que, si desea hacerlo por columnas, debe usar unlist(test).

+24

'c (t (prueba))' funciona también. – Marek

+0

No puedo entender esta solución. podría dar algunas explicaciones más? @teucer – verystrongjoe

+2

@verystrongjoe Hay dos cosas que están sucediendo aquí: 1) t implícitamente convierte un data.frame en una matriz, 2) una matriz es solo un vector especial con el atributo dim y como .vector o c lo elimina – teucer

7
c(df$x, df$y) 
# returns: 26 21 20 34 29 28 

si el orden en particular es importante, entonces:

M = as.matrix(df) 
c(m[1,], c[2,], c[3,]) 
# returns 26 34 21 29 20 28 

O más en general:

m = as.matrix(df) 
q = c() 
for (i in seq(1:nrow(m))){ 
    q = c(q, m[i,]) 
} 

# returns 26 34 21 29 20 28 
+0

Sí, el orden sí importa, quiero la conversión por filas. Y las filas son muchas más que 3. Así que sería mejor si pudieras transformar esto en un bucle o usar una función vectorizada. Gracias. – Brani

+0

paso trivial; respuesta editada en consecuencia. – doug

Cuestiones relacionadas