การเขียนข้อมูลในหลายรูปแบบ
ส่งออกดาต้าเฟรมเป็น CSV, Excel และ RDS ด้วย write_csv() และ writexl
การเขียนข้อมูลในหลายรูปแบบ เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
การเขียนข้อมูลจาก R
การอ่านข้อมูลเป็นเพียงครึ่งหนึ่งของงานเท่านั้น — คุณยังต้องบันทึกผลลัพธ์ด้วย R รองรับรูปแบบผลลัพธ์หลายแบบ ได้แก่ CSV เพื่อความเข้ากันได้ทั่วไป, RDS เพื่อรักษาออบเจ็กต์ R ไว้อย่างครบถ้วน, Parquet เพื่อการวิเคราะห์ประสิทธิภาพสูง และรูปแบบอื่น ๆ ควรเลือกรูปแบบตามกลุ่มผู้ใช้และลักษณะการใช้งาน
library(readr)
# Create a sample data frame to write
df <- data.frame(
name = c('Alice','Bob','Carol'),
score = c(85.5, 92.0, 78.3),
grade = c('B','A','C'),
passed = c(TRUE, TRUE, TRUE)
)
print(df)
cat('\nWe will save this in multiple formats!')write_csv() — บันทึกเป็น CSV
write_csv(df, 'file.csv') บันทึกกรอบข้อมูลเป็นไฟล์ที่คั่นด้วยจุลภาค โดยค่าเริ่มต้นจะไม่เขียนชื่อแถว (ต่างจาก write.csv()) ผลลัพธ์จะเข้ารหัสด้วย UTF-8 เสมอ และส่งคืนกรอบข้อมูลแบบไม่แสดงผล จึงสามารถใช้ในสายการดำเนินการได้
library(readr)
df <- data.frame(
name = c('Alice','Bob','Carol'),
score = c(85, 92, 78)
)
# Write to /tmp for demonstration
write_csv(df, '/tmp/students.csv')
# Verify by reading back
read_csv('/tmp/students.csv', show_col_types=FALSE)ตัวเลือกของ write_csv()
write_csv() รองรับตัวเลือกหลายรายการ ได้แก่ na='NA' ควบคุมวิธีเขียนค่า NA, append=TRUE เพิ่มข้อมูลต่อท้ายไฟล์ที่มีอยู่, col_names=FALSE ไม่เขียนส่วนหัว และ quote ควบคุมว่าจะใส่เครื่องหมายอัญประกาศให้ฟิลด์เมื่อใด
library(readr)
df <- data.frame(
name = c('Alice','Bob'),
city = c('New York','Los,Angeles'), # Contains comma
score = c(85, NA)
)
# na='' writes NA as empty string (common Excel convention)
write_csv(df, '/tmp/test_write.csv', na='')
cat(paste(read_lines('/tmp/test_write.csv'), collapse='\n'))write_tsv() — ผลลัพธ์ที่คั่นด้วยแท็บ
write_tsv(df, 'file.tsv') บันทึกข้อมูลโดยใช้แท็บเป็นตัวคั่น เหมาะสำหรับกรณีที่ข้อมูลมีจุลภาค หรือระบบปลายทางต้องการ TSV โดยมีตัวเลือกเหมือนกับ write_csv()
library(readr)
df <- data.frame(
address = c('123 Main St, NYC','456 Oak Ave, LA'),
score = c(85, 92)
)
# TSV avoids delimiter conflict with commas in addresses
write_tsv(df, '/tmp/addresses.tsv')
cat(paste(read_lines('/tmp/addresses.tsv'), collapse='\n'))saveRDS() — บันทึกออบเจ็กต์ R ใด ๆ
saveRDS(obj, 'file.rds') แปลงออบเจ็กต์ R ใด ๆ เป็นรูปแบบไบนารีดั้งเดิมของ R แล้วบันทึกลงดิสก์ readRDS('file.rds') จะกู้คืนออบเจ็กต์ได้อย่างถูกต้องครบถ้วน โดยรักษาชนิดคอลัมน์ แฟกเตอร์ แอตทริบิวต์ และแม้แต่ออบเจ็กต์โมเดลไว้ได้ ไฟล์นี้อ่านโดยมนุษย์ได้ยาก แต่สามารถย้ายไปใช้ระหว่างเซสชัน R ได้อย่างสมบูรณ์
library(readr)
df <- data.frame(
name = c('Alice','Bob'),
score = c(85.5, 92.0),
grade = factor(c('B','A'), levels=c('A','B','C','D'))
)
# Save with full type preservation
saveRDS(df, '/tmp/students.rds')
# Restore exactly
df2 <- readRDS('/tmp/students.rds')
print(df2)
print(class(df2$grade)) # factor — preserved!saveRDS() เทียบกับ save() — ความแตกต่างสำคัญ
saveRDS(obj, 'file.rds') บันทึกออบเจ็กต์เดียวโดยไม่บันทึกชื่อของออบเจ็กต์ readRDS() ทำให้คุณกำหนดชื่อใด ๆ ให้กับออบเจ็กต์ที่กู้คืนได้ ส่วน save(obj1, obj2, 'file.RData') บันทึกออบเจ็กต์หลายรายการพร้อมชื่อ และ load() จะกู้คืนด้วยชื่อเดิม (ซึ่งอาจเขียนทับตัวแปรที่มีอยู่)
# saveRDS: single object, flexible on load
model <- lm(mpg ~ wt, data=mtcars)
saveRDS(model, '/tmp/my_model.rds')
best_model <- readRDS('/tmp/my_model.rds') # Any name!
cat('R-squared:', round(summary(best_model)$r.squared, 3), '\n')
# save: multiple named objects, fixed names on load
# save(model, mtcars, file='/tmp/workspace.RData')
# load('/tmp/workspace.RData') # Restores 'model' and 'mtcars'write_delim() — ตัวคั่นแบบกำหนดเอง
write_delim(df, file, delim='|') เขียนข้อมูลโดยใช้ตัวคั่นใด ๆ ใช้ฟังก์ชันนี้เมื่อระบบปลายทางต้องการรูปแบบที่คั่นด้วยเครื่องหมายไปป์ หรือรูปแบบอื่นที่ไม่ใช่มาตรฐาน โดยใช้หลักประกันด้านคุณภาพข้อมูลเช่นเดียวกับ write_csv()
library(readr)
df <- data.frame(
id = 1:3,
name = c('Alice','Bob','Carol'),
value = c(100, 200, 150)
)
# Write pipe-delimited
write_delim(df, '/tmp/data.psv', delim='|')
cat(paste(read_lines('/tmp/data.psv'), collapse='\n'))ผลลัพธ์ Excel ด้วย writexl
แพ็กเกจ writexl (แพ็กเกจคู่กับ readxl) เขียนกรอบข้อมูลเป็นรูปแบบ .xlsx ได้ด้วย writexl::write_xlsx(df, 'file.xlsx') หากต้องการหลายชีต ให้ส่งลิสต์ที่มีชื่อกำกับ ไม่จำเป็นต้องติดตั้ง Java หรือ Excel
# writexl::write_xlsx() — example (library not always available)
# library(writexl)
df1 <- data.frame(name=c('Alice','Bob'), score=c(85,92))
df2 <- data.frame(region=c('East','West'), sales=c(100,200))
# Single sheet:
# write_xlsx(df1, '/tmp/students.xlsx')
# Multiple sheets (named list):
# write_xlsx(
# list(students=df1, sales=df2),
# '/tmp/report.xlsx'
# )
cat('writexl writes pure .xlsx without Java or Excel!')ไฟล์ Parquet ด้วย arrow
Apache Parquet เป็นรูปแบบจัดเก็บข้อมูลแบบคอลัมน์ที่เหมาะกับชุดข้อมูลขนาดใหญ่ เนื่องจากบีบอัดได้ดีและอ่านได้เร็วกว่า CSV มากสำหรับคำค้นที่ทำงานกับข้อมูลแบบคอลัมน์ แพ็กเกจ arrow มีฟังก์ชัน write_parquet() และ read_parquet()
# arrow::write_parquet() concept
# library(arrow)
# Large CSV -> Parquet (10-100x smaller, 10-100x faster reads)
# df <- read_csv('big_file.csv')
# write_parquet(df, 'big_file.parquet')
# df_back <- read_parquet('big_file.parquet')
# Parquet benefits:
# - Columnar: only reads columns you need
# - Compressed: ~10x smaller than CSV
# - Typed: no type re-guessing on read
# - Partitioned: split by date/region for parallel reads
cat('Parquet is the modern standard for large-scale analytics in R!')การเขียนข้อมูลในสายการดำเนินการ
ทั้ง write_csv() และ saveRDS() ส่งคืนข้อมูลนำเข้าแบบไม่แสดงผล จึงสามารถใช้ภายในสายการดำเนินการได้โดยไม่ขัดจังหวะการไหลของข้อมูล แทรกขั้นตอนการเขียนระหว่างสายการดำเนินการได้ด้วยจุดตรวจสอบ write_csv() เพื่อให้ทำซ้ำผลลัพธ์ได้
library(readr)
library(dplyr)
# Write mid-pipeline as a checkpoint
final_result <- data.frame(
region=c('East','West','North'),
sales=c(100,200,80)
) %>%
mutate(pct = round(100*sales/sum(sales),1)) %>%
{. ->> checkpoint_df; .} %>% # Save checkpoint
filter(sales > 90)
write_csv(checkpoint_df, '/tmp/checkpoint.csv')
print(final_result)คู่มือการเลือกรูปแบบ
การเลือกรูปแบบผลลัพธ์ที่เหมาะสมขึ้นอยู่กับเป้าหมายของคุณ:
- CSV/TSV: ใช้ได้ทั่วไป อ่านโดยมนุษย์ได้ และใคร ๆ ก็เปิดได้
- RDS: สำหรับ R-to-R รักษาชนิดข้อมูลและแอตทริบิวต์ทั้งหมดไว้อย่างถูกต้องครบถ้วน
- xlsx: เหมาะกับผู้ใช้ทางธุรกิจและผู้ใช้ Excel
- Parquet: เหมาะกับข้อมูลขนาดใหญ่ สายงานการวิเคราะห์ และระบบที่ใช้งานจริง
- JSON: เหมาะกับ API และข้อมูลแบบซ้อนกัน/เป็นลำดับชั้น (
jsonlite::toJSON())
library(readr)
df <- data.frame(
id = 1:5,
value = c(10.5, 20.3, 15.7, 30.1, 25.8)
)
# CSV — universal
write_csv(df, '/tmp/data.csv')
# TSV — when commas are in data
write_tsv(df, '/tmp/data.tsv')
# RDS — R-native, type-preserving
saveRDS(df, '/tmp/data.rds')
cat('Files created:\n')
cat('CSV size:', file.size('/tmp/data.csv'), 'bytes\n')
cat('RDS size:', file.size('/tmp/data.rds'), 'bytes\n')ตรวจสอบความเข้าใจอย่างรวดเร็ว
ข้อได้เปรียบสำคัญของ saveRDS() เหนือ write_csv() ในการบันทึกข้อมูล R คืออะไร
สรุป: การเขียนข้อมูล
ประเด็นสำคัญสำหรับการเขียนข้อมูลจาก R:
write_csv(df, 'file.csv')— คั่นด้วยจุลภาค ไม่มีชื่อแถว และใช้ UTF-8write_tsv(df, 'file.tsv')— ผลลัพธ์ที่คั่นด้วยแท็บwrite_delim(df, file, delim='|')— ใช้ตัวคั่นใดก็ได้saveRDS(obj, 'file.rds')— รูปแบบไบนารีของ R และรักษาชนิดข้อมูลทั้งหมดreadRDS('file.rds')— กู้คืนด้วยชื่อใดก็ได้ ส่วนload()จะกู้คืนชื่อเดิมwritexl::write_xlsx()— ผลลัพธ์ Excel โดยไม่ต้องใช้ Javaarrow::write_parquet()— รูปแบบแบบคอลัมน์สำหรับชุดข้อมูลวิเคราะห์ขนาดใหญ่
library(readr)
df <- data.frame(
name = c('Alice','Bob','Carol'),
score = c(85.5, 92.0, 78.3),
grade = factor(c('B','A','C'))
)
# CSV: universal but loses factor
write_csv(df, '/tmp/demo.csv')
df_csv <- read_csv('/tmp/demo.csv', show_col_types=FALSE)
cat('CSV grade type:', class(df_csv$grade), '\n') # character
# RDS: preserves factor
saveRDS(df, '/tmp/demo.rds')
df_rds <- readRDS('/tmp/demo.rds')
cat('RDS grade type:', class(df_rds$grade)) # factorคำถามที่พบบ่อย
บทเรียน “การเขียนข้อมูลในหลายรูปแบบ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเขียนข้อมูลในหลายรูปแบบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเขียนข้อมูลในหลายรูปแบบ”
ส่งออกดาต้าเฟรมเป็น CSV, Excel และ RDS ด้วย write_csv() และ writexl คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การเขียนข้อมูลในหลายรูปแบบ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม
ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การอ่านไฟล์ CSV ด้วย read_csv()
- การแยกวิเคราะห์ TSV และไฟล์ความกว้างคงที่
- การนำเข้าไฟล์ Excel ด้วย readxl
- การเขียนข้อมูลในหลายรูปแบบ