separate() и unite() для строковых столбцов
Разделяйте и объединяйте значения столбцов, содержащие несколько фрагментов информации.
«separate() и unite() для строковых столбцов» — бесплатный урок R Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения R Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс R Academy содержит 4 уроков всего.
Разделение и объединение строковых столбцов
В необработанных данных несколько фрагментов информации часто помещены в один столбец (например, '2024-03-15' содержит год, месяц и день). Функции separate() и unite() пакета tidyr разделяют один столбец на несколько или объединяют несколько столбцов в один.
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() — разделение одного столбца на несколько
separate(df, col, into, sep) разделяет символьный столбец на несколько новых столбцов с помощью разделителя. Аргумент into задаёт имена новых столбцов; sep — это разделитель (по умолчанию любой неалфавитно-цифровой символ).
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() с аргументом convert
По умолчанию separate() создаёт символьные столбцы. Установите convert = TRUE, чтобы автоматически преобразовать новые столбцы в наиболее подходящий тип (целочисленный, числовой или логический). Это особенно полезно для столбцов года и месяца.
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() с remove = FALSE
По умолчанию separate() удаляет исходный столбец. Установите remove = FALSE, чтобы сохранить его вместе с новыми разделёнными столбцами. Это полезно, если Вы хотите проверить результат разделения или сохранить исходный столбец для справки.
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() по фиксированным позициям
Вместо разделителя можно разделять строку по фиксированным позициям символов, передав в sep целочисленный вектор. Положительные целые числа отсчитываются слева, отрицательные — справа.
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() — объединение столбцов в один
unite(df, col, ..., sep) объединяет несколько столбцов в один символьный столбец. Первый аргумент после df — имя нового столбца, затем идут объединяемые столбцы и строка-разделитель.
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() с remove = FALSE
Как и separate(), unite() по умолчанию удаляет исходные столбцы. Установите remove = FALSE, чтобы сохранить исходные столбцы вместе с новым объединённым столбцом. Это полезно, когда нужны оба представления.
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() для создания ключей
Частое применение unite() — создание составных ключей путём объединения нескольких столбцов-идентификаторов. Это полезно перед объединением таблиц, которым нужен общий ключ, сформированный из нескольких полей.
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() — разделение на несколько строк
separate_rows(df, col, sep) разделяет ячейку с несколькими значениями на отдельные строки. Это отличается от separate(), которая разделяет данные по столбцам. Функция полезна, когда ячейка содержит список элементов, разделённых запятыми.
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 = ',')Цепочка вызовов separate() и unite()
Вы можете объединять вызовы separate() и unite() в конвейер, чтобы изменять формат строк с датами, исправлять несогласованные форматы или создавать новые составные идентификаторы из существующих столбцов.
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='/')Обработка лишних или отсутствующих фрагментов
У separate() есть аргумент extra для случаев, когда фрагментов больше, чем столбцов into: 'warn' (по умолчанию), 'drop' (отбросить лишние) или 'merge' (сохранить последний фрагмент без разделения). Аналогично, fill обрабатывает случаи, когда фрагментов меньше: 'warn', 'right' или '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')Быстрая проверка
Какую функцию следует использовать, чтобы разделить строки, в которых столбец содержит значения через запятую, например 'tag1,tag2,tag3', на отдельные строки по одному тегу?
Итоги: separate() и unite()
Главные выводы о функциях separate() и unite():
separate(col, into, sep)— разделяет один столбец на несколько по разделителю или позицииconvert = TRUE— автоматически преобразует типы результатов разделенияremove = FALSE— сохраняет исходный столбец в обеих функцияхunite(col, ..., sep)— объединяет несколько столбцов в один строковый столбецseparate_rows(col, sep)— разделяет значения с разделителями на несколько строк, а не столбцов- Аргументы
extraиfillобрабатывают несогласованные результаты разделения
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)Часто задаваемые вопросы
Урок «separate() и unite() для строковых столбцов» бесплатный?
Да — полный текст урока «separate() и unite() для строковых столбцов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс R Academy, подпишись на CoddyKit PRO. Курс R Academy содержит 4 уроков всего.
Чему я научусь в уроке «separate() и unite() для строковых столбцов»?
Разделяйте и объединяйте значения столбцов, содержащие несколько фрагментов информации. Ты практикуешь R Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать R Academy?
Предыдущий опыт не требуется. R Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «separate() и unite() для строковых столбцов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке R Academy?
Да. Каждый урок R Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Из широкого формата в длинный с pivot_longer()
- Из длинного формата в широкий с pivot_wider()
- separate() и unite() для строковых столбцов
- Вложенные и развёрнутые таблицы данных