vectores vacio tamaño eliminar elementos crear contar comparar r r-faq

vacio - Combinación única de todos los elementos de dos(o más) vectores



tamaño de un vector en r (3)

Estoy intentando crear una combinación única de todos los elementos de dos vectores de diferentes tamaños en R.

Por ejemplo, el primer vector es

> a <- c("ABC", "DEF", "GHI")

y el segundo es 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

Así que, 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


El paquete tidyr proporciona una buena alternativa de crossing , que funciona mejor que la función clásica expand.grid porque (1) las cadenas no se convierten en factores y (2) la clasificación es más intuitiva:

library(tidyr) a <- c("ABC", "DEF", "GHI") b <- c("2012-05-01", "2012-05-02", "2012-05-03", "2012-05-04", "2012-05-05") crossing(a, b) # A tibble: 15 x 2 a b <chr> <chr> 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


esto tal vez lo que buscas

> expand.grid(a,b) Var1 Var2 1 ABC 2012-05-01 2 DEF 2012-05-01 3 GHI 2012-05-01 4 ABC 2012-05-02 5 DEF 2012-05-02 6 GHI 2012-05-02 7 ABC 2012-05-03 8 DEF 2012-05-03 9 GHI 2012-05-03 10 ABC 2012-05-04 11 DEF 2012-05-04 12 GHI 2012-05-04 13 ABC 2012-05-05 14 DEF 2012-05-05 15 GHI 2012-05-05

Si el orden resultante no es el que desea, puede ordenarlo después. Si nombra los argumentos para expand.grid , se convertirán en nombres de columna:

df = expand.grid(a = a, b = b) df[order(df$a), ]

Y expand.grid generaliza a cualquier cantidad de columnas de entrada.


puede usar la función de orden para ordenar cualquier cantidad de columnas. para tu ejemplo

df <- expand.grid(a,b) > df Var1 Var2 1 ABC 2012-05-01 2 DEF 2012-05-01 3 GHI 2012-05-01 4 ABC 2012-05-02 5 DEF 2012-05-02 6 GHI 2012-05-02 7 ABC 2012-05-03 8 DEF 2012-05-03 9 GHI 2012-05-03 10 ABC 2012-05-04 11 DEF 2012-05-04 12 GHI 2012-05-04 13 ABC 2012-05-05 14 DEF 2012-05-05 15 GHI 2012-05-05 > df[order( df[,1], df[,2] ),] Var1 Var2 1 ABC 2012-05-01 4 ABC 2012-05-02 7 ABC 2012-05-03 10 ABC 2012-05-04 13 ABC 2012-05-05 2 DEF 2012-05-01 5 DEF 2012-05-02 8 DEF 2012-05-03 11 DEF 2012-05-04 14 DEF 2012-05-05 3 GHI 2012-05-01 6 GHI 2012-05-02 9 GHI 2012-05-03 12 GHI 2012-05-04 15 GHI 2012-05-05`