На этот старый вопрос уже есть принятый ответ. Но поскольку он используется как цель для дублирования, я считаю целесообразным добавить решение data.table
, которое использует функцию cross join CJ()
:
library(data.table)
options(datatable.CJ.names=FALSE) # required with version version 1.12.0+
CJ(vars, vis)[, paste(V1, V2, sep =".")]
#[1] "PL.1" "PL.2" "PL.3" "SR.1" "SR.2" "SR.3"
Если первоначальный заказ важен:
CJ(vars, vis, sorted = FALSE)[, paste(V1, V2, sep =".")]
#[1] "SR.1" "SR.2" "SR.3" "PL.1" "PL.2" "PL.3"
Изменить: CJ()
изменил поведение по умолчанию с версией 1.12.0
Как объявлено в примечаниях к выпуску версии 1.12.0 (Пункт 3) параметр по умолчанию options(datatable.CJ.names=TRUE)
был изменен. CJ()
теперь автоматически присваивает имена своим входам, в точности как as data.table()
.
Итак, приведенный выше код необходимо изменить для data.table
версии 1.12.0 и выше:
library(data.table) ### version 1.12.0+
CJ(vars, vis)[, paste(vars, vis, sep =".")]
а также
CJ(vars, vis, sorted = FALSE)[, paste(vars, vis, sep =".")]
соотв.
person
Uwe
schedule
04.06.2017