2017-08-08 1 views
-1

J'ai une table de caractères dans R et je voudrais supprimer le premier et le dernier caractères. J'ai essayé d'utiliser la sous-fonction, mais cela ne fonctionne que pour X1 et non X2. Fondamentalement, je veux aller de ceExpression régulière dans R -Définir dynamiquement le premier et le dernier caractère

X1  |  X2 
-----------|-------------- 
N40ø47.30'| W111ø58.67' 
W32ø50.83'| E96ø51.11' 

Je voudrais obtenir quelque chose comme ça

X1   X2 
----------|------------ 
40ø47.30 | 111ø58.67 
32ø50.83 | 96ø51.11 
+0

Comment avez-vous utilisé 'sub'? –

+0

DF $ X1 <- sub ('.', '', DF $ X1) – Riff

+1

Vous pouvez faire une chose similaire avec X2. Voir http://ideone.com/WzKjjA –

Répondre

2

le premier caractère est ^., le dernier est .$, vous pouvez utiliser gsub pour enlever bot h en même temps:

DF$X1 <- gsub('^.|.$', '', DF$X1) 

Une autre alternative, sans expressions régulières est d'extraire la partie centrale de la chaîne:

substr(DF$X1, 2, nchar(as.character(DF$X1)) - 1) 

Toutefois, notez que ces solutions ne fonctionnent que pour les valeurs qui ont au moins deux caractères. Il est possible de faire fonctionner la solution gsub pour des valeurs de caractère unique:

gsub('^.(.*).$', '\\1', DF$X1) # thanks for @wiktor-stribiżew 
+0

En fait, ce '^. |. $ '' Supprimera les chaînes à 1 et 2 caractères. Je ne suis pas sûr de ce que l'OP a besoin ici. –

+0

@ WiktorStribiżew bon point, ajouté une note à propos de cette limitation – janos

+0

Oui, mais selon les commentaires OP, 'gsub ('^. (. *). $', '\\ 1', DF $ X1)' ne fonctionne pas. –

1

IT est pas ce que vous avez demandé, mais si vous voulez seulement supprimer les caractères N, E, S, W et «vous pouvez exécuter:

gsub("N|E|S|W|'","",DF)