0Pricing
R Academy · Lekcja

separate() i unite() dla kolumn tekstowych

Dziel i łącz wartości kolumn zawierające wiele fragmentów informacji.

separate() i unite() dla kolumn tekstowych to bezpłatna lekcja R Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej R Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs R Academy zawiera 4 lekcji w sumie.

Dzielenie i łączenie kolumn tekstowych

Surowe dane często zawierają wiele informacji upakowanych w jednej kolumnie (np. '2024-03-15' zawiera rok, miesiąc i dzień). Funkcje separate() i unite() z pakietu tidyr dzielą jedną kolumnę na wiele kolumn lub łączą wiele kolumn w jedną.

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() — Dzielenie jednej kolumny na wiele

separate(df, col, into, sep) dzieli kolumnę tekstową na wiele nowych kolumn za pomocą separatora. Argument into określa nazwy nowych kolumn, a sep jest separatorem (domyślnie: dowolny znak niealfanumeryczny).

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() z argumentem convert

Domyślnie funkcja separate() tworzy kolumny znakowe. Ustawienie convert = TRUE automatycznie konwertuje nowe kolumny na najbardziej odpowiedni typ (całkowity, liczbowy lub logiczny). Jest to szczególnie przydatne w przypadku kolumn roku i miesiąca.

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

Domyślnie funkcja separate() usuwa oryginalną kolumnę. Ustawienie remove = FALSE pozwala zachować ją obok nowych, rozdzielonych kolumn. Jest to przydatne, gdy trzeba sprawdzić wynik podziału lub zachować oryginał do celów informacyjnych.

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() według stałych pozycji

Zamiast separatora można dzielić tekst według stałych pozycji znaków, przekazując do sep wektor liczb całkowitych. Dodatnie liczby całkowite są liczone od lewej, a ujemne — od prawej.

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() — Łączenie kolumn w jedną

unite(df, col, ..., sep) łączy wiele kolumn w jedną kolumnę znakową. Pierwszym argumentem po df jest nazwa nowej kolumny, następnie podaje się kolumny do połączenia, a na końcu ciąg separatora.

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

Podobnie jak separate(), funkcja unite() domyślnie usuwa kolumny źródłowe. Ustawienie remove = FALSE pozwala zachować oryginalne kolumny obok nowej, połączonej kolumny. Jest to przydatne, gdy potrzebne są obie postacie danych.

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() do tworzenia kluczy

Częstym zastosowaniem unite() jest tworzenie kluczy złożonych przez połączenie wielu kolumn identyfikatorów. Jest to przydatne przed łączeniem tabel, które wymagają wspólnego klucza zbudowanego z wielu pól.

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() — Dzielenie na wiele wierszy

separate_rows(df, col, sep) dzieli komórkę zawierającą wiele wartości na osobne wiersze. Różni się to od funkcji separate(), która dzieli dane na kolumny. Jest to przydatne, gdy komórka zawiera rozdzieloną przecinkami listę elementów.

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

Łączenie funkcji separate() i unite()

Funkcje separate() i unite() można łączyć w potoku, aby zmieniać format ciągów dat, poprawiać niespójne formaty lub tworzyć nowe identyfikatory złożone na podstawie istniejących kolumn.

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

Obsługa nadmiarowych lub brakujących elementów

Funkcja separate() ma argument extra, który określa sposób postępowania, gdy elementów jest więcej niż kolumn wskazanych w into: 'warn' (domyślnie), 'drop' (odrzucenie nadmiarowych elementów) lub 'merge' (zachowanie ostatniego elementu bez dzielenia). Podobnie argument fill obsługuje mniejszą liczbę elementów: 'warn', 'right' lub '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')

Szybkie sprawdzenie

Jakiej funkcji należy użyć, aby podzielić wiersze, gdy kolumna zawiera wartości rozdzielone przecinkami, takie jak 'tag1,tag2,tag3', i uzyskać jeden wiersz dla każdego tagu?

Podsumowanie: separate() i unite()

Najważniejsze informacje dotyczące funkcji separate() i unite():

  • separate(col, into, sep) — dzieli jedną kolumnę na wiele kolumn według separatora lub pozycji
  • convert = TRUE — automatycznie konwertuje typy wyników podziału
  • remove = FALSE — zachowuje oryginalną kolumnę w obu funkcjach
  • unite(col, ..., sep) — łączy wiele kolumn w jedną kolumnę znakową
  • separate_rows(col, sep) — dzieli wartości rozdzielone separatorem na wiele wierszy (nie kolumn)
  • Argumenty extra i fill obsługują niespójne wyniki dzielenia
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)

Często zadawane pytania

Czy lekcja „separate() i unite() dla kolumn tekstowych” jest bezpłatna?

Tak — pełny tekst „separate() i unite() dla kolumn tekstowych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu R Academy, przejdź na CoddyKit PRO. Kurs R Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „separate() i unite() dla kolumn tekstowych”?

Dziel i łącz wartości kolumn zawierające wiele fragmentów informacji. Ćwiczysz R Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć R Academy?

Nie wymagamy żadnego doświadczenia. R Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „separate() i unite() dla kolumn tekstowych”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji R Academy?

Tak. Każda lekcja R Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Z układu szerokiego do długiego za pomocą pivot_longer()
  2. Z układu długiego do szerokiego za pomocą pivot_wider()
  3. separate() i unite() dla kolumn tekstowych
  4. Zagnieżdżanie i rozpakowywanie ramek danych
← Powrót do R Academy