0Pricing
R Academy · บทเรียน

separate() และ unite() สำหรับคอลัมน์สตริง

แยกและรวมค่าคอลัมน์ที่มีข้อมูลหลายส่วนเข้าด้วยกัน

separate() และ unite() สำหรับคอลัมน์สตริง เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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() สำหรับคอลัมน์สตริง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “separate() และ unite() สำหรับคอลัมน์สตริง”

แยกและรวมค่าคอลัมน์ที่มีข้อมูลหลายส่วนเข้าด้วยกัน คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “separate() และ unite() สำหรับคอลัมน์สตริง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม

ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. จากแบบกว้างเป็นแบบยาวด้วย pivot_longer()
  2. จากแบบยาวเป็นแบบกว้างด้วย pivot_wider()
  3. separate() และ unite() สำหรับคอลัมน์สตริง
  4. การซ้อนและคลายการซ้อนดาต้าเฟรม
← กลับไปที่ R Academy