2010-03-30 15 views
40

Mam dataframe z wpisami numerycznych jak tenKonwersja dataframe do wektora (wierszami)

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

Jak mogę uzyskać następujący wektor?

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

udało mi się dostać za pomocą następujących, ale myślę, że nie powinno być znacznie bardziej elegancki sposób

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

Odpowiedz

91

Możesz spróbować as.vector(t(test)). Pamiętaj, że jeśli chcesz zrobić to według kolumn, powinieneś użyć unlist(test).

+24

'c (t (test))' działa również. – Marek

+0

Nie mogę zrozumieć tego obejścia. może podać więcej wyjaśnień? @teucer – verystrongjoe

+2

@verystrongjoe są tu dwie rzeczy: 1) t niejawnie konwertuje dane.frame na matrycę, 2) macierz jest po prostu specjalnym wektorem z dim atrybutem i as.vector lub c usuwa go – teucer

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

jeśli szczególności kolejność jest ważna wtedy:

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

Lub bardziej ogólnie:

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

Tak, kolejność ma znaczenie, chcę konwertować wierszami. A wiersze są o wiele więcej niż 3. Więc byłoby lepiej, gdybyś mógł przekształcić to w pętlę lub użyć funkcji wektoryzacji. Dziękuję Ci. – Brani

+0

trywialny krok; odpowiednio zmodyfikowaną odpowiedź. – doug

Powiązane problemy