Как объединить два вектора в пары с разделителем - PullRequest
0 голосов
/ 15 мая 2019

Я надеюсь, что здесь используется правильная терминология.

У меня есть два вектора,

 i_25_points <- 130:134
 j_25_points <- 65:69

Я хочу объединить их в пары, почти как матрицу, но затем свернуть их в строку, как показано ниже

 130;65|130;66|130;67....134;65|134;66|134;67|134;68|134;69

Как я могу объединить? Моя первоначальная мысль - создать пары, вложив их в циклы и сложив их вместе.

Но должен быть более изящный способ сделать это.

Ответы [ 3 ]

4 голосов
/ 15 мая 2019

Вы можете использовать outer для создания всех возможных пар и просто paste, т.е.

paste(outer(x, y, paste, sep = ';'), collapse = '|')
1 голос
/ 15 мая 2019

Опция с расширением.grid и вставкой

i_25_points <- 130:134
j_25_points <- 65:69
x <- expand.grid(j_25_points ,j_25_points )
paste(x[,1], x[,2], sep = ";", collapse = "|")
0 голосов
/ 15 мая 2019

Опция с rep и paste

paste(rep(i_25_points, each = length(j_25_points)),
      rep(j_25_points, length(i_25_points)), sep=";", collapse="|")
#[1] "130;65|130;66|130;67|130;68|130;69|131;65|131;66|131;67|131;68|131;69|132;65|132;66|132;67|132;68|132;69|133;65|133;66|133;67|133;68|133;69|134;65|134;66|134;67|134;68|134;69"

Или используя tidyverse

library(tidyverse)
crossing(i_25_points, j_25_points) %>% 
   unite(newCol, i_25_points, j_25_points, sep=":") %>% 
   summarise(newCol = str_c(newCol, collapse="|")) %>%
   pull(newCol)

Данные

i_25_points <- c(130, 131, 132, 133, 134)
j_25_points <- 65:69
...