2010-03-30 36 views
40

Tôi có một dataframe với mục số như thế này mộtChuyển đổi một dataframe để một vector (theo hàng)

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

Làm thế nào tôi có thể nhận được các vector sau đây?

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

tôi đã có thể có được nó bằng cách sử dụng sau, nhưng tôi đoán có phải là một cách nhiều thanh lịch hơn

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

Trả lời

91

Bạn có thể thử as.vector(t(test)). Xin lưu ý rằng, nếu bạn muốn thực hiện theo các cột, bạn nên sử dụng unlist(test).

+24

'c (t (test))' cũng hoạt động. – Marek

+0

Tôi không thể hiểu được cách giải quyết này. có thể đưa ra một số giải thích thêm? @teucer – verystrongjoe

+2

@verystrongjoe có hai điều đang xảy ra ở đây: 1) t ngầm chuyển đổi một data.frame thành ma trận, 2) ma trận chỉ là một vector đặc biệt với thuộc tính mờ và as.vector hoặc c loại bỏ nó – teucer

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

nếu thứ tự cụ thể là rất quan trọng sau đó:

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

Hoặc thông thường hơn:

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

Có, trật tự không thành vấn đề, tôi muốn hội tụ theo hàng. Và các hàng là nhiều hơn 3. Vì vậy, nó sẽ là tốt hơn nếu bạn có thể chuyển đổi điều này thành một vòng lặp hoặc sử dụng một hàm vectơ. Cảm ơn bạn. – Brani

+0

bước tầm thường; đã chỉnh sửa câu trả lời cho phù hợp. – doug

Các vấn đề liên quan