Ricerca Sociale con R

Una wiki per l'analisi dei dati con R

Strumenti Utente

Strumenti Sito


r:tidyverse:forcats_fct_recode

fct_recode (forcats)

In R, il nome dei livelli di un fattore può essere modificato in questo modo:

# dati
library(MASS)
data(survey)
levels(survey$Smoke)
[1] "Heavy" "Never" "Occas" "Regul"
# rinomino il livello del fattore
levels(survey$Smoke)[levels(survey$Smoke)=="Never"] <- "Mai"
levels(survey$Smoke)
[1] "Heavy" "Mai"   "Occas" "Regul"

La funzione fct_recode() del pacchetto forcats (che viene installato con gli altri pacchetti del tidyverse) facilita di gran lunga questa operazione.

Possiamo infatti indicare i nuovi nomi dei livelli con nuovo_nome = “vecchio_nome”, oppure con “nuovo nome” = “vecchio_nome” (attenzione alle virgolette), ed elencandoli uno dopo l'altro:

library(tidyverse)
survey$Smoke <- fct_recode(survey$Smoke, Molto = "Heavy", Mai = "Never",
                           Regol = "Regul")

oppure, con un vettore, in questo modo:

livelli <- c(Molto = "Heavy", Mai = "Never", Regol = "Regul")
survey$Smoke <- fct_recode(survey$Smoke, !!! livelli)
 
levels(survey$Smoke)
[1] "Molto" "Mai"   "Occas" "Regol"

Volendo usare questa funzione mentre si stanno ricodificando o rinominando altre variabili, la useremo con mutate():

# ricodifichiamo i livelli e poi cambiamo nome
survey <- survey %>%
  mutate(Smoke = fct_recode(Smoke, Molto = "Heavy", Mai = "Never",
                            Regol = "Regul")) %>%
  rename("Fuma" = Smoke)

Script di esempio

fct_recode.R
library(MASS)
data(survey)
 
library(tidyverse)
survey$Smoke <- fct_recode(survey$Smoke, Molto = "Heavy", Mai = "Never",
                           Regol = "Regul")
 
# oppure
livelli <- c(Molto = "Heavy", Mai = "Never", Regol = "Regul")
survey$Smoke <- fct_recode(survey$Smoke, !!! livelli)
 
# con mutate
survey <- survey %>%
  mutate(Smoke = fct_recode(Smoke, Molto = "Heavy", Mai = "Never",
                            Regol = "Regul"))

Domande? Scrivimi

su Telegram per email
r/tidyverse/forcats_fct_recode.txt · Ultima modifica: 11/08/2025 14:40 da Agnese Vardanega