J'essaie de créer une combinaison unique de tous les éléments à partir de deux vecteurs de taille différente dans R.
Par exemple, le premier vecteur est
a <- c("ABC", "DEF", "GHI")
et le second est les dates stockées sous forme de chaînes 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 celui-ci
> 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 recherche une combinaison unique en considérant tous les éléments d'un vecteur (a) juxtaposés à tous les éléments du deuxième vecteur (b).
Une solution idéale se généraliserait à plus de vecteurs d'entrée.
Voir aussi:
Comment générer une matrice de combinaisons
plyr
de faire un tri:result <- expand.grid(a=a,b=b); result <- result[order(result$a,result$b),];
expand.grid(b=b,a=a)[2:1]
Le
tidyr
package fournit une alternative intéressantecrossing
, qui fonctionne mieux que laexpand.grid
fonction classique car (1) les chaînes ne sont pas converties en facteurs et (2) le tri est plus intuitif:la source
Manquant dans ce r-faqvue d'ensemble est la
CJ
fonction dedata.table-paquet. En utilisant:donne:
NOTE: depuis la version 1.12.2 nomme
CJ
automatiquement les colonnes résultantes (voir aussi ici et ici ).la source
Depuis la version 1.0.0,
tidyr
propose sa propre version deexpand.grid()
. Il complète la famille existante deexpand()
,nesting()
etcrossing()
avec une fonction de bas niveau qui fonctionne avec des vecteurs .Par rapport à
base::expand.grid()
:la source
vous pouvez utiliser la fonction de commande pour trier n'importe quel nombre de colonnes. pour votre exemple
la source