Indice
Trasformare il tipo di variabile
Vettori, fattori e date
In automatico, R interpreta i campi numerici come vettori e i campi di testo come vettori carattere (dalla versione 4). Possono però esistere situazioni in cui è necessario trasformare le variabili da un tipo all'altro
as.numeric() | a vettore numerico (att. al tipo) |
as.character() | a vettore carattere |
as.factor() | a fattore |
as.Date() | a data (att. al formato) |
Da variabile numerica a variabile categoriale
La variabile è stata importata come numerica, in quanto composta di numeri, ma si tratta di una variabile nominale: Vedi Fattori: da vettore numerico a fattore
La variabile è stata importata come numerica, in quanto composta di numeri, ma si tratta di una variabile ordinale: Vedi Fattori ordinati
Da variabile di testo a variabile categoriale
La variabile è stata costruita o importata come vettore carattere, ma si vogliono indicare i livelli e trasformarla in fattore:
#costruisco un vettore carattere: eta.classi <- c("giovane", "giovane", "anziano", "adulto", "adulto", "giovane", "adulto") # eta.classi diventa il fattore eta.classi eta.classi <- factor(eta.classi)
Da variabile categoriale a variabile di testo
La variabile è stata importata o costruita come variabile categoriale (con livelli), ma contiene testo da trattare come tale, ad esempio risposte a domande libere. Riprendiamo l'esempio di eta.classi
:
eta.classi2 <- as.character(eta.classi)
Da variabile categoriale a variabile cardinale
Vogliamo utilizzare i valori numerici dei livelli di un fattore, ad esempio per usare scale Likert costruite come ordinali:
eta.classi3 <- as.numeric(eta.classi)
È preferibile indicare la classe (*numeric*), piuttosto che il tipo (*double*, *integer* ecc.), a meno che non siamo molto sicuri dei valori contenuti nel vettore, o del tipo di risultato di cui abbiamo bisogno:
as.numeric(c("1", "2", "3.3"))
[1] 1.0 2.0 3.3
typeof(as.numeric(c("1", "2", "3.3")))
[1] "double"
Se forziamo il tipo “integer”, ad esempio, i valori verranno trasformati in numeri interi:
as.integer(c("1", "2", "3.3"))
[1] 1 2 3
Date
Spesso, le date vengono importate in formato testo. Possono essere trasformate in tipo “Date” con il comando as.Date
:
# costruiamo una variabile carattere "Data" Data <-c("24/7","10/2","30/3") # la trasformiamo in tipo "Date" Data2 <- as.Date(Data, format("%d/%m"))
Data2 [1] "2017-07-24" "2017-02-10" "2017-03-30"
R interpreta correttamente il formato della data, ma aggiunge l'anno corrente.
In generale, capita di dover fare delle correzioni, e spesso conviene trasformare la variabile carattere, ad esempio:
#aggiungiamo l'anno DataB<-paste(Data,"2016", sep = "/") DataB2 <- as.Date(DataB, format("%d/%m/%Y"))
DataB [1] "24/7/2016" "10/2/2016" "30/3/2016" DataB2 [1] "2016-07-24" "2016-02-10" "2016-03-30"
I formati delle date possono essere di tanti tipi, a seconda del sistema che le ha generate, o del modo in cui sono state inserite o interpretate: vedi Quik-R: Date Values
Script di esempio
- Es Ricod_1.R
#costruisco un vettore carattere: eta.classi <- c("giovane", "giovane", "anziano", "adulto", "adulto", "giovane", "adulto") # eta.classi diventa il fattore eta.classi eta.classi <- factor(eta.classi) # da categoriale a testo eta.classi2 <- as.character(eta.classi) # da categoriale a cardinale eta.classi3 <- as.numeric(eta.classi) # costruiamo una variabile carattere "Data" Data <-c("24/7","10/2","30/3") # la trasformiamo in tipo "Date" Data2 <- as.Date(Data, format("%d/%m")) #aggiungiamo l'anno DataB<-paste(Data,"2016", sep = "/") DataB2 <- as.Date(DataB, format("%d/%m/%Y"))