90 votes

Collage de deux vecteurs avec des combinaisons de tous les éléments des vecteurs

J'ai deux vecteurs :

vars <- c("SR", "PL")
vis <- c(1,2,3)

Sur la base de ces vecteurs, je voudrais créer le vecteur suivant :

"SR.1"  "SR.2"  "SR.3"  "PL.1"  "PL.2"  "PL.3"

Avec paste J'obtiens le résultat suivant :

paste(vars, vis, sep=".")
 [1] "SR.1" "PL.2" "SR.3"

Comment puis-je créer le vecteur dont j'ai besoin ?

5voto

Ronak Shah Points 24715

D'autres options avec purrr :

library(purrr)
cross(list(vars, vis)) %>% map_chr(paste, sep = ".", collapse = ".")
#[1] "SR.1" "PL.1" "SR.2" "PL.2" "SR.3" "PL.3"

Nous pouvons également utiliser cross2

cross2(vars, vis) %>%  map_chr(paste, sep = ".", collapse = ".")
#[1] "SR.1" "PL.1" "SR.2" "PL.2" "SR.3" "PL.3"

1voto

andemexoax Points 86

Avec dplyr, copié à partir de ceci lien

    fruits <- tibble(
  type   = c("apple", "orange", "apple", "orange", "orange", "orange"),
  year   = c(2010, 2010, 2012, 2010, 2010, 2012),
  size  =  factor(
    c("XS", "S",  "M", "S", "S", "M"),
    levels = c("XS", "S", "M", "L")
  ),
  weights = rnorm(6, as.numeric(size) + 2)
)

Toutes les combinaisons possibles, c'est-à-dire qu'elles sont toutes définies, mais pas nécessairement présentes dans les données.

fruits %>% expand(type)
#> # A tibble: 2 x 1
#>   type  
#>   <chr> 
#> 1 apple 
#> 2 orange
fruits %>% expand(type, size)
#> # A tibble: 8 x 2
#>   type   size 
#>   <chr>  <fct>
#> 1 apple  XS   
#> 2 apple  S    
#> 3 apple  M    
#> 4 apple  L    
#> 5 orange XS   
#> 6 orange S    
#> 7 orange M    
#> 8 orange L    
b<-fruits %>% expand(type, size, year)
#> # A tibble: 16 x 3
#>    type   size   year
#>    <chr>  <fct> <dbl>
#>  1 apple  XS     2010
#>  2 apple  XS     2012
#>  3 apple  S      2010
#>  4 apple  S      2012
#>  5 apple  M      2010
#>  6 apple  M      2012
#>  7 apple  L      2010
#>  8 apple  L      2012
#>  9 orange XS     2010
#> 10 orange XS     2012
#> 11 orange S      2010
#> 12 orange S      2012
#> 13 orange M      2010
#> 14 orange M      2012
#> 15 orange L      2010
#> 16 orange L      2012

Puis un simple collage

b <- fruits %>% expand(type, size, year) %>% 
     mutate(., pasted=paste(type, size, year, sep="."))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X