0Pricing
R Academy · Lezione

separate() e unite() per le colonne di testo

Divida e unisca valori di colonna contenenti più informazioni.

separate() e unite() per le colonne di testo è una lezione R Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento R Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso R Academy include 4 lezioni in totale.

Suddivisione e combinazione di colonne di stringhe

I dati grezzi contengono spesso più informazioni concentrate in un'unica colonna (ad esempio, '2024-03-15' contiene anno, mese e giorno). Le funzioni separate() e unite() di tidyr suddividono una colonna in più colonne oppure ne combinano diverse in una sola.

library(tidyr)

# Date stored as a single string column
df <- data.frame(
  id = 1:4,
  date = c('2024-01-15','2024-03-22','2023-11-08','2024-06-30'),
  value = c(100, 200, 150, 175)
)

print(df)

separate() — Suddivisione di una colonna in più colonne

separate(df, col, into, sep) suddivide una colonna di caratteri in più nuove colonne usando un separatore. L'argomento into specifica i nomi delle nuove colonne; sep è il delimitatore (per impostazione predefinita, qualsiasi carattere non alfanumerico).

library(tidyr)

df <- data.frame(
  id = 1:4,
  date = c('2024-01-15','2024-03-22','2023-11-08','2024-06-30')
)

# Split 'date' into year, month, day
separate(
  df,
  col = date,
  into = c('year','month','day'),
  sep = '-'
)

separate() con l'argomento convert

Per impostazione predefinita, separate() crea colonne di caratteri. Imposti convert = TRUE per convertire automaticamente le nuove colonne nel tipo più appropriato (integer, numeric, logical). Questa opzione è particolarmente utile per le colonne relative ad anno e mese.

library(tidyr)

df <- data.frame(
  event = c('2024-1','2024-2','2023-12'),
  score = c(85, 90, 78)
)

result <- separate(
  df,
  col = event,
  into = c('year','month'),
  sep = '-',
  convert = TRUE
)

print(result)
cat('year type:', class(result$year), '\n')
cat('month type:', class(result$month))

separate() con remove = FALSE

Per impostazione predefinita, separate() rimuove la colonna originale. Imposti remove = FALSE per conservarla insieme alle nuove colonne ottenute dalla suddivisione. È utile quando desidera verificare la suddivisione o mantenere l'originale come riferimento.

library(tidyr)

df <- data.frame(
  full_code = c('US-CA-001','US-TX-002','UK-LDN-003')
)

separate(
  df,
  col = full_code,
  into = c('country','state','code'),
  sep = '-',
  remove = FALSE   # Keep original column
)

separate() su posizioni fisse

Invece di un delimitatore, può suddividere il testo in posizioni fisse passando un vettore di interi a sep. Gli interi positivi contano da sinistra; quelli negativi contano da destra.

library(tidyr)

# Product code: first 3 chars = category, next 4 = id
df <- data.frame(
  code = c('ABC1234','XYZ5678','DEF9012'),
  qty = c(10, 20, 15)
)

separate(
  df,
  col = code,
  into = c('category','product_id'),
  sep = 3    # Split after position 3
)

unite() — Combinazione di colonne in una sola

unite(df, col, ..., sep) combina più colonne in un'unica colonna di caratteri. Il primo argomento dopo df è il nome della nuova colonna, seguito dalle colonne da combinare e infine dalla stringa separatrice.

library(tidyr)

df <- data.frame(
  first = c('Alice','Bob','Carol'),
  last = c('Smith','Jones','White'),
  score = c(85, 90, 78)
)

unite(
  df,
  col = 'full_name',
  first, last,
  sep = ' '
)

unite() con remove = FALSE

Come separate(), anche unite() rimuove per impostazione predefinita le colonne di origine. Imposti remove = FALSE per conservare le colonne originali insieme alla nuova colonna combinata. È utile quando ha bisogno di entrambe le rappresentazioni.

library(tidyr)

df <- data.frame(
  year = c(2024, 2024, 2023),
  month = c(1, 3, 12),
  day = c(15, 22, 8)
)

unite(
  df,
  col = 'date_str',
  year, month, day,
  sep = '-',
  remove = FALSE
)

unite() per creare chiavi

Un uso comune di unite() consiste nel creare chiavi composite combinando più colonne identificative. È utile prima di unire tabelle che richiedono una chiave condivisa costruita a partire da più campi.

library(tidyr)
library(dplyr)

orders <- data.frame(
  year = c(2024, 2024, 2023),
  region = c('East','West','East'),
  seq_num = c(1, 1, 2)
)

orders_keyed <- orders %>%
  unite(col = 'order_key', year, region, seq_num, sep = '_')

print(orders_keyed)

separate_rows() — Suddivisione in più righe

separate_rows(df, col, sep) suddivide una cella contenente più valori in righe separate. È diverso da separate(), che suddivide il contenuto in colonne. È utile quando una cella contiene un elenco di elementi separati da virgole.

library(tidyr)

# Tags stored as comma-separated values in one cell
df <- data.frame(
  id = 1:3,
  title = c('Intro to R','Data Viz','ML Basics'),
  tags = c('r,beginner','r,ggplot,visualization','r,ml,modeling')
)

separate_rows(df, tags, sep = ',')

Concatenazione di separate() e unite()

Può concatenare separate() e unite() in una pipeline per riformattare stringhe di date, correggere formati incoerenti o creare nuovi identificatori compositi a partire da colonne esistenti.

library(tidyr)
library(dplyr)

# Reformat date from YYYY-MM-DD to DD/MM/YYYY
df <- data.frame(
  id = 1:3,
  date = c('2024-01-15','2024-03-22','2023-11-08')
)

df %>%
  separate(date, into=c('year','month','day'), sep='-') %>%
  unite(col='date_eu', day, month, year, sep='/')

Gestione di parti aggiuntive o mancanti

separate() dispone dell'argomento extra per i casi in cui le parti siano più numerose delle colonne into: 'warn' (impostazione predefinita), 'drop' (scarta le parti aggiuntive) oppure 'merge' (mantiene l'ultima parte non suddivisa). Analogamente, fill gestisce le parti mancanti: 'warn', 'right' oppure 'left'.

library(tidyr)

# Inconsistent data: some rows have 2 parts, some have 3
df <- data.frame(
  code = c('A-1','B-2-extra','C-3'),
  value = c(10, 20, 30)
)

# 'merge' keeps the last piece unsplit
separate(df, code, into=c('prefix','suffix'), sep='-',
         extra='merge')

Verifica rapida

Quale funzione utilizzerebbe per suddividere in righe i valori separati da virgole, come 'tag1,tag2,tag3', creando una riga per ogni tag?

Riepilogo: separate() e unite()

Punti chiave di separate() e unite():

  • separate(col, into, sep) — suddivide una colonna in più colonne usando un delimitatore o posizioni fisse
  • convert = TRUE — converte automaticamente il tipo dei risultati della suddivisione
  • remove = FALSE — conserva la colonna originale in entrambe le funzioni
  • unite(col, ..., sep) — combina più colonne in un'unica colonna di stringhe
  • separate_rows(col, sep) — suddivide i valori delimitati in più righe (non colonne)
  • Gli argomenti extra e fill gestiscono i risultati incoerenti della suddivisione
library(tidyr)
library(dplyr)

df <- data.frame(
  id = 1:3,
  datetime = c('2024-01-15 09:30','2024-03-22 14:15','2023-11-08 11:45')
)

df %>%
  separate(datetime, into=c('date','time'), sep=' ') %>%
  separate(date, into=c('year','month','day'), sep='-', convert=TRUE) %>%
  separate(time, into=c('hour','minute'), sep=':', convert=TRUE)

Domande Frequenti

La lezione «separate() e unite() per le colonne di testo» è gratuita?

Sì — il testo completo di «separate() e unite() per le colonne di testo» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso R Academy, passa a CoddyKit PRO. Il corso R Academy include 4 lezioni in totale.

Cosa imparerò in «separate() e unite() per le colonne di testo»?

Divida e unisca valori di colonna contenenti più informazioni. Eserciti R Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare R Academy?

Non è richiesta alcuna esperienza precedente. R Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «separate() e unite() per le colonne di testo»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione R Academy?

Sì. Ogni lezione R Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Da formato wide a long con pivot_longer()
  2. Da formato long a wide con pivot_wider()
  3. separate() e unite() per le colonne di testo
  4. Annidamento e disannidamento dei data frame
← Torna a R Academy