Ich versuche, eine einzigartige Kombination aller Elemente aus zwei Vektoren unterschiedlicher Größe in R zu erstellen.
Zum Beispiel ist der erste Vektor
a <- c("ABC", "DEF", "GHI")
und das zweite sind Daten, die derzeit als Zeichenfolgen gespeichert sind
b <- c("2012-05-01", "2012-05-02", "2012-05-03", "2012-05-04", "2012-05-05")
Ich muss einen Datenrahmen mit zwei Spalten wie dieser erstellen
> 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
Im Grunde suche ich nach einer einzigartigen Kombination, indem ich alle Elemente eines Vektors (a) neben allen Elementen des zweiten Vektors (b) betrachte.
Eine ideale Lösung würde auf mehr Eingabevektoren verallgemeinern.
Siehe auch:
So generieren Sie eine Matrix von Kombinationen
plyr
nur eine Sortierung durchführen zu müssen:result <- expand.grid(a=a,b=b); result <- result[order(result$a,result$b),];
expand.grid(b=b,a=a)[2:1]
Das
tidyr
Paket bietet die nette Alternativecrossing
, die besser funktioniert als die klassischeexpand.grid
Funktion, da (1) Zeichenfolgen nicht in Faktoren umgewandelt werden und (2) die Sortierung intuitiver ist:quelle
Fehlt dabei r-faqÜbersicht ist die
CJ
-Funktion aus demDatentabelle-Paket. Verwenden von:gibt:
HINWEIS: Seit Version 1.12.2
CJ
werden die resultierenden Spalten automatisch benannt (siehe auch hier und hier ).quelle
Seit Version 1.0.0
tidyr
bietet eine eigene Version vonexpand.grid()
. Es vervollständigt die vorhandene Familie vonexpand()
,nesting()
undcrossing()
mit einer Funktion auf niedriger Ebene, die mit Vektoren arbeitet .Im Vergleich zu
base::expand.grid()
:quelle
Mit der Bestellfunktion können Sie eine beliebige Anzahl von Spalten sortieren. für dein Beispiel
quelle