Diese alte Frage hat bereits eine akzeptierte Antwort. Da es jedoch als Dupe-Ziel verwendet wird, lohnt es sich meiner Meinung nach, eine data.table
Lösung hinzuzufügen , die die Cross-Join- Funktion verwendet CJ()
:
library(data.table)
options(datatable.CJ.names=FALSE)
CJ(vars, vis)[, paste(V1, V2, sep =".")]
Falls die ursprüngliche Bestellung wichtig ist:
CJ(vars, vis, sorted = FALSE)[, paste(V1, V2, sep =".")]
Bearbeiten: CJ()
hat das Standardverhalten mit Version 1.12.0 geändert
Wie in den Versionshinweisen von Version 1.12.0 (Punkt 3) angekündigt, options(datatable.CJ.names=TRUE)
hat sich die Standardoption geändert. CJ()
Jetzt benennt es seine Eingaben automatisch genau as data.table()
.
Daher muss der obige Code für data.table
Version 1.12.0 und höher geändert werden :
library(data.table)
CJ(vars, vis)[, paste(vars, vis, sep =".")]
und
CJ(vars, vis, sorted = FALSE)[, paste(vars, vis, sep =".")]
bzw.
expand.grid
gibt eine Tabelle , die sortiert werden können , wenn Sie die Bestellung sein wollenSR,SR,PL,PL...
stattSR,PL,SR,PL
.