2015-06-18 29 views
5

Ho un vettore di caratteri contenente nomi di variabili come x <- c("AB.38.2", "GF.40.4", "ABC.34.2"). Voglio estrarre le lettere in modo da avere un vettore di carattere ora contenente solo le lettere, ad es. c("AB", "GF", "ABC").Estrai lettere da una stringa in R

Poiché il numero di lettere varia, non è possibile utilizzare substring per specificare il primo e l'ultimo carattere.

Come posso fare questo?

risposta

3

si può provare

sub("^([[:alpha:]]*).*", "\\1", x) 
[1] "AB" "GF" "ABC" 
+0

Oppure 'sub (" [^ [: alpha:]] + "," ", x)' –

+1

Oppure, con 'library (" stringr ")', un po 'più leggibile: 'str_extract (x," [ AZ] + ")' – vaettchen

1

Nessuna delle risposte funziona se si è mescolato lettera con spazi. Ecco quello che sto facendo per quei casi:

x <- c("AB.38.2", "GF.40.4", "ABC.34.2", "A B ..C 312, Fd") 
unique(na.omit(unlist(strsplit(unlist(x), "[^a-zA-Z]+")))) 

[1] "AB" "GF" "ABC" "A" "B" "C" "Fd"

1

Questo è il modo in cui sono riuscito a risolvere questo problema. Io uso questo perché restituisce i 5 elementi in modo pulito e posso controllare se voglio uno spazio tra le parole:

x <- c("AB.38.2", "GF.40.4", "ABC.34.2", "A B ..C 312, Fd", " a") 
 

 
extract.alpha <- function(x, space = ""){  
 
    require(stringr) 
 
    require(purrr) 
 
    require(magrittr) 
 
    
 
    y <- strsplit(unlist(x), "[^a-zA-Z]+") 
 
    z <- y %>% map(~paste(., collapse = space)) %>% simplify() 
 
    return(z)} 
 

 
extract.alpha(x, space = " ")

+0

a proposito, readr ha funzioni per gestire la separazione di testo/carattere, controlla readr :: parse_number() readr :: parse_character() readr :: parse_date() – cephalopod

0

Mi rendo conto che è una vecchia questione, ma dal momento che cercavo una risposta simile proprio ora e l'ho trovata, pensavo di condividere.

La soluzione più semplice e veloce mi sono ritrovato:

x <- c("AB.38.2", "GF.40.4", "ABC.34.2") 
only_letters <- function(x) { gsub("^([[:alpha:]]*).*$","\\1",x) } 
only_letters(x) 

e l'uscita è:

[1] "AB" "GF" "ABC" 

Spero che questo aiuti qualcuno!

Problemi correlati