0Pricing
R Academy · Leçon

separate() et unite() pour les colonnes de chaînes

Séparez et fusionnez les valeurs de colonnes contenant plusieurs éléments d’information.

separate() et unite() pour les colonnes de chaînes est une leçon R Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage R Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours R Academy comprend 4 leçons au total.

Découper et combiner des colonnes de chaînes

Les données brutes contiennent souvent plusieurs informations regroupées dans une seule colonne (par exemple, '2024-03-15' contient l'année, le mois et le jour). Les fonctions separate() et unite() de tidyr permettent de diviser une colonne en plusieurs colonnes ou de combiner plusieurs colonnes en une seule.

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() — Diviser une colonne en plusieurs

separate(df, col, into, sep) divise une colonne de caractères en plusieurs nouvelles colonnes à l'aide d'un séparateur. L'argument into donne leurs noms aux nouvelles colonnes ; sep est le délimiteur (par défaut : tout caractère non alphanumérique).

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() avec l'argument convert

Par défaut, separate() crée des colonnes de caractères. Définissez convert = TRUE pour convertir automatiquement les nouvelles colonnes vers le type le plus approprié (entier, numérique ou logique). Cette option est particulièrement utile pour les colonnes d'année et de mois.

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() avec remove = FALSE

Par défaut, separate() supprime la colonne d'origine. Définissez remove = FALSE pour la conserver à côté des nouvelles colonnes issues du découpage. Cette option est utile pour vérifier le découpage ou conserver l'original comme référence.

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() à des positions fixes

Au lieu d'utiliser un délimiteur, vous pouvez découper à des positions fixes des caractères en transmettant un vecteur d'entiers à sep. Les entiers positifs comptent depuis la gauche ; les entiers négatifs comptent depuis la droite.

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() — Combiner des colonnes en une seule

unite(df, col, ..., sep) combine plusieurs colonnes en une seule colonne de caractères. Le premier argument après df est le nom de la nouvelle colonne, suivi des colonnes à combiner, puis de la chaîne séparatrice.

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() avec remove = FALSE

Comme separate(), unite() supprime par défaut les colonnes sources. Définissez remove = FALSE pour conserver les colonnes d'origine à côté de la nouvelle colonne combinée. Cette option est utile lorsque vous avez besoin des deux formes.

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() pour créer des clés

Un usage courant de unite() consiste à créer des clés composites en combinant plusieurs colonnes d'identifiants. Cette méthode est utile avant de joindre des tables qui nécessitent une clé commune construite à partir de plusieurs champs.

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() — Diviser en plusieurs lignes

separate_rows(df, col, sep) divise une cellule contenant plusieurs valeurs en lignes distinctes. Cette fonction se distingue de separate(), qui divise les données en colonnes. Elle est utile lorsqu'une cellule contient une liste d'éléments séparés par des virgules.

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 = ',')

Enchaîner separate() et unite()

Vous pouvez enchaîner separate() et unite() dans un pipeline pour reformater des chaînes de dates, corriger des formats incohérents ou créer de nouveaux identifiants composites à partir de colonnes existantes.

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='/')

Gérer les éléments supplémentaires ou manquants

separate() possède un argument extra pour les cas où il y a plus d'éléments que de colonnes into : 'warn' (par défaut), 'drop' (ignorer les éléments supplémentaires) ou 'merge' (conserver le dernier élément sans le diviser). De même, fill gère les cas où il y a moins d'éléments : 'warn', 'right' ou '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')

Vérification rapide

Quelle fonction utiliseriez-vous pour diviser en lignes distinctes une colonne contenant des valeurs séparées par des virgules, comme 'tag1,tag2,tag3', afin d'obtenir une ligne par étiquette ?

Récapitulatif : separate() et unite()

Points essentiels de separate() et unite() :

  • separate(col, into, sep) — divise une colonne en plusieurs colonnes selon un délimiteur ou une position
  • convert = TRUE — convertit automatiquement le type des résultats du découpage
  • remove = FALSE — conserve la colonne d'origine dans les deux fonctions
  • unite(col, ..., sep) — combine plusieurs colonnes en une seule colonne de chaînes
  • separate_rows(col, sep) — divise les valeurs délimitées en plusieurs lignes (et non en colonnes)
  • Les arguments extra et fill gèrent les résultats de découpage incohérents
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)

Questions Fréquemment Posées

La leçon « separate() et unite() pour les colonnes de chaînes » est-elle gratuite ?

Oui — le texte complet de « separate() et unite() pour les colonnes de chaînes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours R Academy, passe à CoddyKit PRO. Le cours R Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « separate() et unite() pour les colonnes de chaînes » ?

Séparez et fusionnez les valeurs de colonnes contenant plusieurs éléments d’information. Tu pratiques R Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer R Academy ?

Aucune expérience préalable n'est requise. R Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « separate() et unite() pour les colonnes de chaînes » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon R Academy ?

Oui. Chaque leçon R Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Du format large au format long avec pivot_longer()
  2. Du format long au format large avec pivot_wider()
  3. separate() et unite() pour les colonnes de chaînes
  4. Imbriquer et désimbriquer des data frames
← Retour à R Academy