Conversione di Stringhe in Interi, Decimali e Booleani in R
Nel contesto dell'analisi dei dati e del data cleaning, la conversione dei dati svolge un ruolo cruciale. I dati grezzi raramente si presentano nel formato necessario per eseguire le nostre analisi. I dati provengono solitamente da fonti diverse, come file CSV, database, API web, input manuale e possono avere una grande varietà di formati e tipi. La capacità di convertire i dati in formati coerenti ed utilizzabili per le nostre analisi è fondamentale.
Lo scopo di questo articolo è fornire una guida pratica su come convertire stringhe in interi e booleani utilizzando il linguaggio di programmazione R. Questo articolo si rivolge sia ai principianti che agli sviluppatori esperti, offrendo esempi chiari e dettagliati delle funzioni R fondamentali per queste conversioni.
Per seguire le nozioni e gli esempi dell'articolo è necessario che tu abbia una familiarità di base con il linguaggio R e con i suoi concetti fondamentali ed elementari. Altro requisito è che tu abbia installato un ambiente di esecuzione di R, sul tuo pc. Se non hai un ambiente configurato, puoi leggere questo articolo, nel quale ti spiego come configurare un ambiente usando docker.
Conversione di Stringhe in Interi
La conversione tra stringhe ed interi è un'operazione comune quando si lavora
con i dati in R. Ad esempio, i dati numerici possono essere importati come
stringhe da file csv. La funzione principale in R, per eseguire la conversione
tra stringhe ed interi, è la as.integer()
.
Funzione as.integer()
La funzione as.integer()
converte un oggetto in un intero. Se l'oggetto in
questione è una stringa che al suo interno contiene un numero intero, la
funzione restituirà il numero intero corrispondente.
La sintassi della funzione è la seguente:
as.integer(x)
dove x
è l'oggetto che si intende convertire in numero intero.
Esempio pratico
Supponi di voler convertire in intero la stringa contenente il numero "678"
.
Il seguente codice effettuerà la conversione:
numero_stringa <- "678"
numero_intero <- as.integer(numero_stringa)
print(numero_intero) # Stampa numero: 678
Nell'esempio la stringa numero_stringa
, contenente il numero "678"
, è
convertita nel numero intero 678
Gestione delle anomalie
Nelle nostre analisi dei dati, ad esempio quando stiamo importando i dati da un
file csv, una colonna che contiene valori numerici (memorizzati come stringa),
potrebbe in qualche dato non contenere valori oppure contenere valori non
numerici. Come si comporta la funzione as.integer
in questi casi?
La funzione as.integer()
restituisce NA
ed un avviso, nel caso il valore
contenuto nella stringa non sia un intero.
numero_stringa <- "124a"
numero_intero <- as.integer(numero_stringa)
print(numero_intero) # Stampa: NA con un avviso
Nel codice, al fine di evitare errori, puoi gestire l'esito della conversione, e quindi stabilire se è andata a buon fine o meno, con la funzione is.na()
, come segue:
if ( is.na(numero_intero) ) {
print("Conversione riuscita con successo!")
}
Conversione Stringhe in Decimali
Nel precedente paragrafo hai visto come convertire valori stringa in numeri interi, se il valore della stringa contiene un numero intero. Tuttavia, all'interno delle stringhe possono essere contenuti non solo valori interi ma più generalmente valori decimali di cui potremmo aver bisogno.
Per eseguire questa conversione, la funzione as.integer()
non c'è di grande aiuto.
numero_stringa <- "124.89"
numero_intero <- as.integer(numero_stringa)
print(numero_intero) # Stampa: 124
Come puoi vedere, il codice precedente converte si il numero, senza fornire errori, ma lo converte in intero. Quindi la precedente conversione rimuove la parte decimale. Come puoi quindi convertire un numero mantenendo la parte decimale? Tale conversione può essere eseguita per mezzo della funzione as.numeric()
.
Funzione as.numeric()
La funzione as.numeric()
lavora in maniera molto simile alla funzione
as.integer
ma converte i valori della stringa in valori decimali.
La sintassi della funzione è la seguente:
as.numeric(x)
dove x
è la stringa da convertire.
Esempio pratico
Supponi di voler convertire la stringa "123.67"
in valore decimale. Eseguirai:
stringa_decimale <- "123.67"
numero_decimale <- as.numeric(stringa_decimale)
print(numero_decimale) # Stampa: 123.67
La precedente conversione mantiene la precisione anche sui numeri decimali.
Gestione anomalie
La gestione delle anomalie è simile alla gestione delle stesse per la funzione
as.integer()
. Anche la funzione as.numeric()
restituisce NA
se il valore
dell'oggetto prelevato come parametro, risulta non essere un valore numerico.
Conversione di Stringhe in Booleani
La conversione di stringhe in valori booleani è essenziale per molte operazioni
logiche e di filtraggio nei dati. In R, la funzione principale utilizzata per
questa conversione è as.logical()
. Questa funzione trasforma stringhe che
rappresentano valori booleani ("TRUE"
, "FALSE"
, "T"
, "F"
) in veri e
propri valori logici TRUE
e FALSE
.
Funzione as.logical()
La funzione as.logical()
converte un oggetto in un valore logico. Se
l'oggetto è una stringa contenente un valore booleano, la funzione restituirà
il corrispondente valore booleano.
La sintassi della funzione è la seguente:
as.logical(x)
dove x
è l'oggetto da convertire in booleano.
Esempio pratico
Considera una stringa contenente un valore booleano e prova a convertirla, come segue:
stringa_booleana <- "True"
valore_booleano <- as.logical(stringa_booleana)
print(valore_booleano) # Stampa: TRUE
Gestione anomalie
La funzione as.logical()
, come le altre funzioni viste in precedenza, restituisce NA
se l'oggetto ricevuto come parametro non rappresenta un valore booleano.
Ad esempio, il seguente codice:
stringa_booleana <- "pippo"
valore_booleano <- as.logical(stringa_booleana)
print(valore_booleano) # Stampa: NA
restituisce NA
poiché pippo
non è un valore convertibile in booleano.
Puoi gestire il risultato della conversione utilizzando la funzione is.na()
per capire se la stessa è andata o meno a buon fine.
Conversioni personalizzate
Nella conversione verso valori booleani, può capitare di dover convertire
valori non standard in valori booleani, all'interno del nostro codice. Hai
visto che la funzione is.logical()
non è di aiuto in fare ciò; per questo è
opportuno implementare una funzione ad-hoc che ottemperi a quanto desiderato.
Supponi di dover convertire, per opportuna logica del tuo codice, i valori
stringa "1"
e "yes"
in TRUE
, ed i valori "0"
e "no"
in FALSE
. Come
puoi fare?
La seguente funzione str_to_bool
implementa quanto richiesto:
# Funzione per convertire una stringa in booleano
str_to_bool <- function(str) {
str <- tolower(str) # conversione stringa in minuscolo
if (str %in% c("yes", "1")) {
return(TRUE)
} else if (str %in% c("no", "0")) {
return(FALSE)
} else {
stop("La stringa non può essere convertita in un valore booleano")
}
}
La precedente funzione può essere richiamata come segue, fornendo i seguenti risultati:
bool_val1 <- str_to_bool("yes")
print(bool_val1) # TRUE
bool_val2 <- str_to_bool("no")
print(bool_val2) # FALSE
# Questo genererà un errore
bool_val3 <- str_to_bool("abc")
print(bool_val3)
Conclusioni
La conversione delle stringhe in tipi di dati numerici e booleani è una
competenza fondamentale per chi lavora con R, specialmente nel contesto della
pulizia e dell'analisi dei dati. Abbiamo esplorato come convertire stringhe in
interi utilizzando as.integer()
, in numeri decimali con as.numeric()
, e in
valori booleani con as.logical()
e una funzione personalizzata per gestire
casi specifici.
Queste tecniche assicurano che i dati siano nel formato corretto per l'analisi, migliorando l'efficienza del codice e la qualità delle analisi. La gestione appropriata delle conversioni dei dati previene errori e inconsistenze, permettendo di lavorare con dataset complessi in modo più agevole e preciso.
Adottare queste pratiche nel tuo lavoro quotidiano contribuirà a rendere il processo di analisi dei dati più fluido e affidabile, garantendo risultati accurati e significativi. Continuare a esplorare e padroneggiare queste tecniche ti aiuterà a diventare più efficiente e competente nell'utilizzo di R per i tuoi progetti di data science.