J'ai deux vecteurs:
a <- c(1,2,3)
b <- c(11,12,13)
Je souhaite créer une combinaison de noms de colonnes (3 * 3 = 9) de sorte qu'ils utilisent les valeurs des deux:
paper1grid11
paper1grid12
paper1grid13
paper2grid11
paper2grid12
paper2grid13
paper3grid11
paper3grid12
paper3grid13
J'ai essayé d'utiliser la commande paste0 mais cela ne fait pas de combinaison. Au lieu de cela, il crée simplement 3 noms de colonnes.
paste0("paper", a,"grid", b)
Je ne veux pas utiliser de boucle for
5 réponses
Vous pouvez le faire avec expand.grid
.
a <- c(1,2,3)
b <- c(11,12,13)
do.call(paste0, expand.grid("paper", a, "grid", b))
Vous pouvez utiliser outer
, c'est-à-dire
outer(a, b, function(x, y) paste0('paper', x, 'grid', y))
# [,1] [,2] [,3]
#[1,] "paper1grid11" "paper1grid12" "paper1grid13"
#[2,] "paper2grid11" "paper2grid12" "paper2grid13"
#[3,] "paper3grid11" "paper3grid12" "paper3grid13"
Ou enroulez-le autour de c
pour obtenir la réponse sous forme de vecteur, c'est-à-dire
c(outer(a, b, function(x, y) paste0('paper', x, 'grid', y)))
#[1] "paper1grid11" "paper2grid11" "paper3grid11" "paper1grid12" "paper2grid12" "paper3grid12" "paper1grid13" "paper2grid13" "paper3grid13"
Ce message est balisé avec data.table
, voici donc une solution data.table
:
CJ(a, b)[, paste0("paper", a, "grid", b)]
# [1] "paper1grid11" "paper2grid11" "paper3grid11" "paper1grid12" "paper2grid12"
# [6] "paper3grid12" "paper1grid13" "paper2grid13" "paper3grid13
apply(expand.grid("paper", a, "grid", b), 1, paste, collapse="")
Vous pouvez utiliser le croisement ()
library(tidyverse)
crossing("paper",a,"grid",b)%>%unite(`"paper"`,a,`"grid"`,b, col = "col1",sep="")%>%pull(col1)
[1] "paper1grid11" "paper1grid12" "paper1grid13" "paper2grid11" "paper2grid12" "paper2grid13"
[7] "paper3grid11" "paper3grid12" "paper3grid13"
Questions connexes
De nouvelles questions
r
R est un langage de programmation et un environnement logiciel libres et open source pour le calcul statistique, la bioinformatique, la visualisation et le calcul général. Veuillez fournir des exemples minimaux et reproductibles ainsi que le résultat souhaité. Utilisez dput () pour les données et spécifiez tous les packages non basiques avec des appels à library (). N'incorporez pas d'images pour les données ou le code, utilisez plutôt des blocs de code en retrait. Pour les questions relatives aux statistiques, utilisez https://stats.stackexchange.com.