Estoy tratando de crear una combinación única de todos los elementos de dos vectores de diferente tamaño en R.
Por ejemplo, el primer vector es
a <- c("ABC", "DEF", "GHI")
y el segundo son las fechas almacenadas como cadenas actualmente
b <- c("2012-05-01", "2012-05-02", "2012-05-03", "2012-05-04", "2012-05-05")
Necesito crear un marco de datos con dos columnas como esta
> data
a b
1 ABC 2012-05-01
2 ABC 2012-05-02
3 ABC 2012-05-03
4 ABC 2012-05-04
5 ABC 2012-05-05
6 DEF 2012-05-01
7 DEF 2012-05-02
8 DEF 2012-05-03
9 DEF 2012-05-04
10 DEF 2012-05-05
11 GHI 2012-05-01
12 GHI 2012-05-02
13 GHI 2012-05-03
14 GHI 2012-05-04
15 GHI 2012-05-05
Entonces, básicamente, estoy buscando una combinación única al considerar todos los elementos de un vector (a) yuxtapuestos con todos los elementos del segundo vector (b).
Una solución ideal se generalizaría a más vectores de entrada.
Ver también:
Cómo generar una matriz de combinaciones
plyr
de hacer una clasificación:result <- expand.grid(a=a,b=b); result <- result[order(result$a,result$b),];
expand.grid(b=b,a=a)[2:1]
El
tidyr
paquete proporciona una buena alternativacrossing
, que funciona mejor que laexpand.grid
función clásica porque (1) las cadenas no se convierten en factores y (2) la clasificación es más intuitiva:fuente
Falta en esto r-faqdescripción general es la
CJ
función de latabla de datos-paquete. Utilizando:da:
NOTA: dado que la versión 1.12.2 nombra
CJ
automáticamente las columnas resultantes (consulte también aquí y aquí ).fuente
Desde la versión 1.0.0,
tidyr
ofrece su propia versión deexpand.grid()
. Se completa la familia existente deexpand()
,nesting()
ycrossing()
con una función de bajo nivel que trabaja con vectores .En comparación con
base::expand.grid()
:fuente
puede utilizar la función de orden para ordenar cualquier número de columnas. por tu ejemplo
fuente