2010-03-30 16 views
40

Ho un dataframe con le voci numeriche come questoConversione di un dataframe ad un vettore (per righe)

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

Come posso ottenere il seguente vettore?

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

sono stato in grado di farlo utilizzando il seguente, ma credo che ci dovrebbe essere un molto più elegante modo

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

risposta

91

Puoi provare as.vector(t(test)). Si prega di notare che, se si vuole farlo per colonne, è necessario utilizzare unlist(test).

+24

'c (t (test))' funziona anche. – Marek

+0

Non riesco a capire questa soluzione alternativa. potrebbe dare qualche spiegazione in più? @teucer – verystrongjoe

+2

@verystrongjoe ci sono due cose che succedono qui: 1) t converte implicitamente un data.frame in una matrice, 2) una matrice è solo un vettore speciale con l'attributo dim e as.vector o c lo rimuove – teucer

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

se l'ordine particolare, è importante allora:

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

O più in generale:

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ì, l'ordine è importante, voglio la conversione per righe. E le righe sono molte di più di 3. Quindi sarebbe meglio se potessi trasformarlo in un loop o usare una funzione vettoriale. Grazie. – Brani

+0

passaggio banale; modifica la risposta di conseguenza. – doug

Problemi correlati