2012-09-03 28 views
10

Trong một khung dữ liệu, tôi có một cột chứa các chuỗi ký tự. Hãy nói rằng nó trông như thế này:Làm thế nào để tạo ra tất cả các kết hợp có thể có của vectơ mà không cần quan tâm đến trật tự?

x <- unique(df[,1]) 
x 
"A" "A" "B" "B" "B" "C" 

Tôi muốn để có được tất cả các kết hợp có thể có của các chuỗi kí tự độc đáo như bộ 2 mà không quan tâm đến thứ tự của chúng, vì vậy A, B cũng giống như B, A, và tôi don' t muốn nhận được các giá trị giống như kết hợp như A, A. Cho đến nay, tôi nhận được cho đến thời điểm này:

comb <- expand.grid(x, x) 
comb <- comb[which(comb[,1] != comb[,2]),] 

Nhưng điều này vẫn còn vấn đề có các hàng có cùng một chuỗi kết hợp theo thứ tự khác nhau. Làm cách nào để loại bỏ điều này?

+2

'x' không thể ** có thể ** là nội dung bạn hiển thị; chúng sẽ là duy nhất nếu bạn đã áp dụng 'unique()' cho 'df [, 1]' có phải không? –

+0

Bạn nói đúng, tôi trộn nó với việc in nội dung của cột khung dữ liệu. 'x' tất nhiên không chứa các bản sao. – AnjaM

Trả lời

16

Có những combn chức năng trong gói utils:

t(combn(LETTERS[1:3],2)) 
#  [,1] [,2] 
# [1,] "A" "B" 
# [2,] "A" "C" 
# [3,] "B" "C" 

Tôi là một chút bối rối là tại sao x của bạn đã nhân đôi giá trị.

+0

Cảm ơn, đó là chính xác những gì tôi muốn nhận được! – AnjaM

12

Tôi nghĩ rằng bạn đang tìm kiếm combn:

x <- c("A", "A", "B", "B", "B", "C") 
combn(x,2) 

Cung cấp:

 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] 
[1,] "A" "A" "A" "A" "A" "A" "A" "A" "A" "B" "B" "B" "B" "B" "B" 
[2,] "A" "B" "B" "B" "C" "B" "B" "B" "C" "B" "B" "C" "B" "C" "C" 

Và nếu bạn muốn giá trị chỉ duy nhất trong x (Tôi không có ý tưởng tại sao bạn có giá trị trùng lặp trong x trong địa điểm đầu tiên nếu đó là kết quả của cuộc gọi unique()):

> combn(unique(x),2) 
    [,1] [,2] [,3] 
[1,] "A" "A" "B" 
[2,] "B" "C" "C" 
+0

Cảm ơn, tôi không biết về 'combn'. Tôi chấp nhận câu trả lời của BenBarnes bởi vì nó cho chính xác sản lượng tôi muốn, nhưng rõ ràng là bạn cũng trả lời câu hỏi của tôi. – AnjaM

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