2017-05-20 2 views
0

J'ai une colonne remplie avec une chaîne avec le même motif * .stage1. Je veux saisir chaque chaîne, copier chaque chaîne dans une autre colonne comme une puce; découpez ".stage1" et remplissez la première colonne avec chaque caractère avant ".stage1". Cela vous fera gagner beaucoup de temps, pouvez-vous suggérer un paquet qui peut m'aider à créer ce script?Découper les chaînes dans la colonne avec le même modèle

Merci, Mago

+2

Pourriez-vous fournir des exemples de données? – akash87

Répondre

2

Copie la colonne ne devrait pas être un problème. Vous pouvez faire la version modifiée avec sub.

## Some sample data 
df = data.frame(x = paste0("A", 1:9, ".stage1")) 
> df 
      x 
1 A1.stage1 
2 A2.stage1 
3 A3.stage1 
4 A4.stage1 
5 A5.stage1 
6 A6.stage1 
7 A7.stage1 
8 A8.stage1 
9 A9.stage1 

df$x2 = df$x 
df$x = sub("(.*)\\.stage1", "\\1", df$x) 
df 
    x  x2 
1 A1 A1.stage1 
2 A2 A2.stage1 
3 A3 A3.stage1 
4 A4 A4.stage1 
5 A5 A5.stage1 
6 A6 A6.stage1 
7 A7 A7.stage1 
8 A8 A8.stage1 
9 A9 A9.stage1 

Des informations supplémentaires sur l'instruction sub.
sub remplacera tout ce qui correspond à la première expression avec le second. Quelles sont ces expressions?

Première expression: "(. *) \\. Stage1"
. correspond à n'importe quel personnage.
. * Correspond à n'importe quel nombre de caractères.
Parce que. * Est entre parenthèses, tout ce qui correspond sera stocké dans une variable appelée \ 1.
Donc "(. *) \\. Stage1" correspondra à la chaîne ".stage1" et tout avant de stocker les caractères avant .stage1 dans \ 1.

Deuxième expression: "\\ 1"
Nous voulons remplacer cela par les seuls caractères précédents, donc la chaîne de remplacement est "\\ 1".

0

Vous pouvez le faire directement avec str_match de stringr:

library(stringr) 

x <- paste0("A", 1:9, ".stage1") # sample data 

str_match(x, "(.*)\\.stage") 

    [,1]  [,2] 
[1,] "A1.stage" "A1" 
[2,] "A2.stage" "A2" 
[3,] "A3.stage" "A3" 
[4,] "A4.stage" "A4" 
[5,] "A5.stage" "A5" 
[6,] "A6.stage" "A6" 
[7,] "A7.stage" "A7" 
[8,] "A8.stage" "A8" 
[9,] "A9.stage" "A9" 

Les valeurs à l'intérieur de la parenthèse captent la première partie de la chaîne, de sorte que lorsque vous appelez str_match retourne la chaîne complète en plus d'une colonne avec la capture valeur.