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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- จากแบบกว้างเป็นแบบยาวด้วย pivot_longer()
- จากแบบยาวเป็นแบบกว้างด้วย pivot_wider()
- separate() และ unite() สำหรับคอลัมน์สตริง
- การซ้อนและคลายการซ้อนดาต้าเฟรม