2012-09-03 13 views
10

En un marco de datos, tengo una columna que contiene cadenas de caracteres. Digamos que tiene este aspecto:¿Cómo generar todas las combinaciones posibles de vectores sin importar el orden?

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

Me gustaría obtener todas las combinaciones posibles de las cadenas de caracteres únicos como conjuntos de 2 y sin preocuparse por su orden, por lo A, B es lo mismo que B, A, y yo no' Quiero obtener los mismos valores que la combinación como A, A. Hasta el momento, llegué hasta este punto:

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

Pero esto todavía deja el problema de tener filas con la misma combinación de secuencias en un orden diferente. ¿Cómo me deshago de esto?

+2

'x' no puede ** posiblemente ** ser lo que muestra; Serían únicos si hubiera aplicado 'unique()' a 'df [, 1]' ¿no es así? –

+0

Tiene razón, lo mezclé con la impresión del contenido de la columna del marco de datos. 'x' por supuesto no contiene duplicados. – AnjaM

Respuesta

16

Hay combn la función en el paquete utils:

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

Estoy un poco confundido en cuanto a por qué su x ha duplicado valores.

+0

¡Gracias, eso es exactamente lo que quería obtener! – AnjaM

12

creo que busca combn:

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

Da:

 [,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" 

Y si quieres sólo valores únicos en x (no tengo ni idea de por qué usted tiene valores duplicados en x en el primer lugar si es el resultado de una llamada unique()):

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

Gracias, no sabía sobre 'combn'. Acepté la respuesta de BenBarnes porque da exactamente la salida que quería, pero obviamente también respondiste a mi pregunta. – AnjaM

Cuestiones relacionadas