2011-11-01 2 views
3

Je suis embrased pour poser cette question simple, mais je ne pouvais pas le comprendre.Génération de séquence

J'ai une variable

names <- c("M1", "K2L", "C2L", "N", "R_1_2", "CLA", "T123") # the real dataset has > 6000 valriables 

Je veux doubler les noms et ajouter alphabets "a" et "b" et la sortie (considérer ordre trop) ressemblerait à ce qui suit:

M1a, M1b, K2La, K2Lb, C2La, C2Lb, Na, Nb, R_1_2a, R_1_2b, CLAa, CLAb, T123a, T123b 

Merci pour l'aide:

Répondre

3

Utilisez rep avec l'argument each pour répéter chaque nom. Ensuite, utilisez paste pour les combiner avec le suffixe.

paste(rep(names, each = 2), c("a", "b"), sep = "") 

Regardons à ce nouveau ralenti:

suffixes <- c("a", "b") # or letters[1:2] if you're feeling fancy 
n_suffixes <- length(suffixes) 
repeated_names <- rep(names, each = n_suffixes) 
final_names <- paste(repeated_names, suffixes, sep = "") 

Fantaisie autre version en produits externes:

as.vector(t(outer(names, suffixes, paste, sep = ""))) 

Bien que je pense que cela est plus pour montrer, puisque c'est moins lisible.

1

Une autre solution à l'aide stringr package

library(stringr) 
str_c(rep(names, each = 2), c('a', 'b'))