2010-03-30 30 views
40

我有數字輸入一個數據幀像這樣的轉換一個數據幀的載體(行)

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

我怎樣可以得到下面的載體?

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

我可以使用下面的得到它,但我想應該有一個更優雅的方式

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

回答

91

您可以嘗試as.vector(t(test))。請注意,如果您想要按列操作,請使用unlist(test)

+24

'c(t(test))'也可以。 – Marek 2010-03-31 08:09:44

+0

我無法理解此解決方法。可以給出更多的解釋嗎? @teucer – verystrongjoe 2016-08-30 10:21:32

+2

@verystrongjoe這裏有兩件事情要做:1)t隱式地將data.frame轉換爲矩陣,2)矩陣只是一個特殊的帶dim屬性的向量,as.vector或c將它移除它 – teucer 2016-08-31 02:25:07

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

如果特定的順序很重要,那麼:

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

或更一般地說:

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

是的,順序確實重要,我想按行轉換。行數多於3.因此,如果可以將其轉換爲循環或使用向量化函數,那將會更好。謝謝。 – Brani 2010-03-30 13:04:21

+0

微不足道的一步;相應地編輯回答。 – doug 2010-03-30 13:43:25