2011-10-17 25 views
17

Nếu tôi có hai vectơ có cùng độ dài A<-c(5,10)B<-c(7,13) làm cách nào tôi có thể dễ dàng biến hai vectơ này thành một vector tuple đơn i. e. c((5,7),(7,13))?Tạo các bộ dữ liệu từ hai vectơ

+0

Cấu trúc bạn xác định là một danh sách trong R Một danh sách là một vector chung, trong đó mỗi phần tử có thể là bất kỳ kiểu đối tượng R nào. Trong trường hợp này, bạn muốn danh sách trong đó mỗi phần tử là một vectơ có chiều dài hai, chứa một bộ tuple. –

+0

Bạn cần phải làm rõ câu hỏi của bạn, vì 'c (A, B)' "hoạt động". I E. có chuyện gì vậy? –

+0

@Joshua - một sự sụp đổ tiềm năng của phương pháp đó là không có gì có cấu trúc xác định con số nào là một phần của một bộ dữ liệu. –

Trả lời

14

Những người khác có danh sách được đề cập. Tôi thấy khả năng khác:

cbind(A, B) # makes a column-major 2x2-"vector" 
rbind(A, B) # an row major 2x2-"vector" which could also be added to an array with `abind` 

Đó là alsp có thể để bảo vệ "nguồn gốc" của họ

AB <- cbind(A=A, B=B) 
array(c(AB,AB+10), c(2,2,2)) 
, , 1 
    [,1] [,2] 
[1,] 5 7 
[2,] 10 13 
, , 2 
    [,1] [,2] 
[1,] 15 17 
[2,] 20 23 

> abind(array(c(AB,AB+10), c(2,2,2)), AB+20) 
, , 1 
     A B 
[1,] 5 7 
[2,] 10 13 

, , 2 
     A B 
[1,] 15 17 
[2,] 20 23 

, , 3 
     A B 
[1,] 25 27 
[2,] 30 33 
+0

Cảm ơn vì điều này. Xin lỗi về tất cả sự nhầm lẫn. Tôi chỉ muốn ghép từng hàng trong vector của tôi = /. – LostLin

+1

Cũng xem xét data.frame (A = A, B = B) – Oren

4

Tôi không chắc chắn này là chính xác những gì bạn đang tìm kiếm, nhưng:

list(A, B)

mang đến cho bạn một cấu trúc như thế này:

> str(list(A, B)) 
List of 2 
$ : num [1:2] 5 10 
$ : num [1:2] 7 13 

và là nghĩa đen đại diện như này:

dput (danh sách (A, B)) danh sách (c (5, 10), c (7, 13))

... gần như kết quả cuối cùng được đề xuất như bạn có thể nhận được, tôi nghĩ vậy.

Danh sách trong R về bản chất là một vectơ của bất kỳ thứ gì bạn muốn.

Nếu đó không phải là những gì bạn đang tìm kiếm, có thể hữu ích nếu bạn có thể mở rộng chính xác những gì bạn muốn làm với vectơ này.

+0

+1 'list()' chắc chắn có vẻ là kiểu đối tượng phù hợp nhất để sử dụng. –

+0

@Matt, tôi nghĩ nó được xoay từ những gì anh ta muốn - hàng cho cột và ngược lại. Không chắc chắn mặc dù! –

+0

@Ed Các 'str()' bit chỉ là một đại diện dễ đọc - danh sách chính nó không có hàng hoặc cột ở tất cả, thực sự. Nó theo nghĩa đen là một vector chứa các bộ dữ liệu. Để lặp qua các bộ dữ liệu, danh sách chắc chắn là cách để đi. Tuy nhiên, không chắc chắn ứng dụng ở đây là gì. –

5

vector tuple của bạn c((5,7),(7,13)) không phải là cú pháp hợp lệ. Tuy nhiên, lời nói của bạn khiến tôi nghĩ rằng bạn đang nghĩ đến một thứ như python's zip. Bạn muốn các bộ dữ liệu của bạn được thể hiện bằng R như thế nào? R có loại không đồng nhất (đệ quy) list và loại đồng nhất vector; không có các loại vô hướng (có nghĩa là, các kiểu chỉ giữ một giá trị), chỉ các vectơ có độ dài 1 (phần nào là một sự đơn giản hóa).

Nếu bạn muốn tuples của bạn sẽ được hàng của một ma trận (tất cả cùng loại, mà họ đang ở đây):

rbind(A,B) 

Nếu bạn muốn có một danh sách các vectơ

mapply(c, A, B, SIMPLIFY=FALSE) 

Nếu bạn muốn có một danh sách liệt kê (đó là những gì bạn sẽ cần nếu AB không cùng loại)

mapply(list, A, B, SIMPLIFY=FALSE) 

Kết hợp tất cả lại với nhau:

> A<-c(5,10) 
> B<-c(7,13) 
> 
> cbind(A,B) 
     A B 
[1,] 5 7 
[2,] 10 13 
> mapply(c, A, B, SIMPLIFY=FALSE) 
[[1]] 
[1] 5 7 

[[2]] 
[1] 10 13 

> mapply(list, A, B, SIMPLIFY=FALSE) 
[[1]] 
[[1]][[1]] 
[1] 5 

[[1]][[2]] 
[1] 7 


[[2]] 
[[2]][[1]] 
[1] 10 

[[2]][[2]] 
[1] 13 
+0

R có một cái gì đó gọi là loại nguyên tử (hoặc chế độ). Xem '? Nguyên tử'. Tôi nghĩ rằng tôi biết những gì bạn có nghĩa là (giá trị vô hướng), nhưng những người khác có thể bối rối hơn. –

+0

@JoshuaUlrich Bạn đúng là "nguyên tử" không phải là lựa chọn tốt nhất của từ vì nó có ý nghĩa cụ thể trong R. Ý tưởng tôi cố gắng đạt được là không có loại nào chứa _only_ một giá trị duy nhất. Nếu bạn có một gợi ý của một cách tốt hơn để cụm từ đó, tôi sẽ rất vui khi xem xét nó. –

+0

Tôi thích [vô hướng] (http://en.wikipedia.org/wiki/Scalar_%28computing%29). –

1

Tôi thấy những gì bạn muốn thực hiện (vì tôi có cùng một vấn đề)!

Tại sao không sử dụng số phức, vì họ là về cơ bản không có gì khác nhưng hai số chiều và họ là một loại chính thức dữ liệu trong R với tất cả các phương pháp cần thiết có sẵn:

A <- complex(real=5,imaginary=10) 
B <- complex(real=7,imaginary=13) 

c(A,B) 
## [1] 5+10i 7+13i 

matrix(c(A,B),ncol=1) 
##  [,1] 
## [1,] 5+10i 
## [2,] 7+13i 
Các vấn đề liên quan