Combinaison Unique de tous les éléments à partir de deux (ou plus) de vecteurs
Je suis en train de créer une combinaison unique de tous les éléments de deux vecteurs de taille différente dans la R.
Par exemple, le premier vecteur est
> a <- c("ABC", "DEF", "GHI")
et le second est les dates stockées comme des chaînes de caractères actuellement
> b <- c("2012-05-01", "2012-05-02", "2012-05-03", "2012-05-04", "2012-05-05")
J'ai besoin de créer un bloc de données avec deux colonnes, comme ce
> 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
Donc, fondamentalement, je suis à la recherche d'une combinaison unique en tenant compte de tous les éléments d'un vecteur (un) juxtaposés avec tous les éléments de la deuxième vecteur (b).
Une solution idéale serait de généraliser à plus de vecteurs en entrée.
Voir aussi:
Comment générer une matrice de combinaisons
Vous devez vous connecter pour publier un commentaire.
ce peut-être ce que vous êtes après
Si la commande n'est pas ce que vous voulez, vous pouvez les trier par la suite. Si vous nommez les arguments pour
expand.grid
, ils deviendront les noms de colonne:Et
expand.grid
généralise à un nombre quelconque de colonnes d'entrée.plyr
de faire un tri:result <- expand.grid(a=a,b=b); result <- result[order(result$a,result$b),];
La
tidyr
paquet fournit la belle alternativecrossing
, qui fonctionne mieux que le classiqueexpand.grid
fonction car (1) les chaînes de caractères ne sont pas convertis en facteurs et (2) le tri est plus intuitive:Manque dans ce r-faq vue d'ensemble est l'
CJ
fonction de la de données.la table-paquet. Aide:donne:
Dans les futures versions de de données.la table vous pouvez simplement utiliser:
CJ(a, b, unique = TRUE)
(voir aussi ici et ici).Vous pouvez déjà profiter de cette fonctionnalité déjà, en définissant les options:
options("datatable.CJ.names" = TRUE)
.vous pouvez utiliser la fonction de tri d'un nombre quelconque de colonnes. pour votre exemple
order
a été déjà démontré dans l'acceptation de réponse.