Post Image

Conversione di Stringhe in Interi, Decimali e Booleani in R

26 giu 2024

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.