2013-02-15 80 views
8

Tôi có một bộ vectơ V_1, V_2, ..., V_n mà tôi muốn chuyển đổi thành ma trận. Mỗi vector trở thành một vector cột trong ma trận. Kích thước của mỗi vector là như nhau. Có một chức năng đơn giản để làm điều này? Trong phần ma trận của The R Book nó không xuất hiện rằng chức năng này tồn tại. cóvectơ cột để ma trận trong R

mat=matrix(c(V1, V2, ..., VN), nrow=length(V1)) 
  1. là một số loại chức năng phụ thêm ma trận để thêm cột vào cuối của một ma trận:

    gì Tôi hiện đang làm là gì?

CHỈNH SỬA: Mục tiêu cuối cùng là thực hiện phân cụm k-means với ma trận này. Tên của các vectơ của tôi không thực sự là V_1, V_2, ..., V_n. Tên của các vectơ là các chất nền tương ứng với tên tập tin mà dữ liệu đến từ (đây là một bản đồ 1-1). Cuối cùng, tôi sẽ lặp lại tất cả các tệp trong một thư mục cụ thể, trích xuất dữ liệu vào một vectơ và sau đó thêm mỗi vectơ cột vào một ma trận.

+0

Có vần hoặc lý do về cách vectơ của bạn được đặt tên, chúng có nghĩa là V1 ... VN? Các giải pháp khác ở đây sẽ là cbind, nhưng bạn vẫn sẽ phải đặt tên cho mỗi và tất cả các vectơ của bạn. – russellpierce

+0

Vectơ của tôi không được đặt tên $ V_1, \ ldots, V_n $ tuy nhiên, có một chút vần điệu hoặc lý do cho tên của vectơ của tôi vì chúng sẽ là một chuỗi con của tên tệp mà dữ liệu xuất phát. – CodeKingPlusPlus

+0

FYI, cấu trúc dữ liệu của bạn và cấu trúc mong muốn khá đơn giản và dễ mô tả mà không đòi hỏi sự hiểu biết thống kê. Vì vậy, câu hỏi của bạn có thể được yêu cầu tốt hơn trên stackoverflow. Bây giờ bạn không phải làm gì cả. Nếu đủ thành viên cộng đồng khác đồng ý với đánh giá của tôi thì nó sẽ được di chuyển. – russellpierce

Trả lời

8

Lệnh có thể hoạt động cho bạn là: sapply(ls(pattern="V[[:digit:]]"),get) Đối số trong mẫu là biểu thức chính quy khớp với vectơ bạn muốn (và chỉ các vectơ bạn muốn). Ngoài ra, cho rằng các vectơ được đặt tên từ một chuỗi con của một số tên tệp, tôi giả sử bạn có thể tạo một vectơ ký tự với mỗi tên vectơ làm phần tử. Nếu có, bạn có thể thay thế lệnh ls bằng vectơ đó.

Chỉnh sửa: Ma trận nối thêm theo cột sẽ là cbind (cột ràng buộc). Ví dụ:

V1 <- rnorm(20) 
V2 <- rnorm(20) 
V3 <- rnorm(20) 
mat <- matrix(c(V1,V2),nrow=length(V1)) 
(mat.app <- cbind(mat,V3)) 
+0

'(mat.app <- cbind (mat, V3))' hoạt động khi tôi chạy nó trên một vector, nhưng khi tôi áp dụng nó trong một vòng lặp không thay đổi. Bất kỳ ý tưởng? – CodeKingPlusPlus

+0

Vâng ... những gì đang thay đổi là mat.app không mat. Vì vậy, trong vòng lặp của bạn, bạn cần phải chắc chắn rằng bạn đang lưu trữ mat mới trong cùng một tên mà bạn sau này sẽ sử dụng như là một đối số trong cbind. Ví dụ. mat <- cbind (mat, VectorToAdd) – russellpierce

+4

Bạn có thể làm 'do.call (" cbind ", lapply (ls (pattern =" V [[: digit:]] "), get))' để tự động hóa bước cuối cùng của 'cbind'-ing các vectơ. – caracal

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