Уникальная комбинация всех элементов из двух (или более) векторов

Я пытаюсь создать уникальную комбинацию всех элементов из двух векторов разного размера в R.

Например, первый вектор

> a <- c("ABC", "DEF", "GHI") 

а вторая – даты, хранящиеся в виде строк в настоящее время

 > b <- c("2012-05-01", "2012-05-02", "2012-05-03", "2012-05-04", "2012-05-05") 

Мне нужно создать фрейм данных с двумя столбцами, подобными этому

 > data ab 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 

Поэтому в основном я ищу уникальную комбинацию, рассматривая все элементы одного вектора (a), сопоставляемые со всеми элементами второго вектора (b).

Идеальное решение будет обобщать на большее количество входных векторов.


Смотрите также:
Как создать матрицу комбинаций

это может быть, что вы после

 > expand.grid(a,b) Var1 Var2 1 ABC 2012-05-01 2 DEF 2012-05-01 3 GHI 2012-05-01 4 ABC 2012-05-02 5 DEF 2012-05-02 6 GHI 2012-05-02 7 ABC 2012-05-03 8 DEF 2012-05-03 9 GHI 2012-05-03 10 ABC 2012-05-04 11 DEF 2012-05-04 12 GHI 2012-05-04 13 ABC 2012-05-05 14 DEF 2012-05-05 15 GHI 2012-05-05 

Если полученный заказ не является тем, что вы хотите, вы можете сортировать его потом. Если вы expand.grid аргументы для expand.grid , они станут именами столбцов:

 df = expand.grid(a = a, b = b) df[order(df$a), ] 

А expand.grid обобщает на любое количество входных столбцов.

Пакет tidyr обеспечивает приятное альтернативное crossing , которое работает лучше, чем classическая функция expand.grid потому что (1) строки не преобразуются в факторы и (2) сортировка более интуитивная:

 library(tidyr) a <- c("ABC", "DEF", "GHI") b <- c("2012-05-01", "2012-05-02", "2012-05-03", "2012-05-04", "2012-05-05") crossing(a, b) # A tibble: 15 x 2 ab   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 

вы можете использовать функцию заказа для сортировки любого количества столбцов. для вашего примера

 df <- expand.grid(a,b) > df Var1 Var2 1 ABC 2012-05-01 2 DEF 2012-05-01 3 GHI 2012-05-01 4 ABC 2012-05-02 5 DEF 2012-05-02 6 GHI 2012-05-02 7 ABC 2012-05-03 8 DEF 2012-05-03 9 GHI 2012-05-03 10 ABC 2012-05-04 11 DEF 2012-05-04 12 GHI 2012-05-04 13 ABC 2012-05-05 14 DEF 2012-05-05 15 GHI 2012-05-05 > df[order( df[,1], df[,2] ),] Var1 Var2 1 ABC 2012-05-01 4 ABC 2012-05-02 7 ABC 2012-05-03 10 ABC 2012-05-04 13 ABC 2012-05-05 2 DEF 2012-05-01 5 DEF 2012-05-02 8 DEF 2012-05-03 11 DEF 2012-05-04 14 DEF 2012-05-05 3 GHI 2012-05-01 6 GHI 2012-05-02 9 GHI 2012-05-03 12 GHI 2012-05-04 15 GHI 2012-05-05` 
  • Почему не рекомендуется использовать attach () в R, и что я должен использовать вместо этого?
  • Преобразование эпохи UNIX в объект Date
  • Ошибка в if / while (условие) {: аргумент имеет длину 0
  • Разделить data.frame на основе уровней фактора в новые data.frames
  • Как сделать отличный R воспроизводимый пример
  • Совокупность / суммирование нескольких переменных для каждой группы (например, сумма, среднее значение)
  • Как удалить все пробелы из строки?
  • Почему эти цифры не равны?
  • Как назвать переменные «на лету»?
  • Установка кривой плотности на гистограмму в R
  • Как эффективно фильтровать фрейм данных?
  • Давайте будем гением компьютера.