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

การแยกวิเคราะห์ TSV และไฟล์ความกว้างคงที่

ใช้ read_tsv() และ read_fwf() กับข้อมูลที่คั่นด้วยแท็บและข้อมูลความกว้างคงที่

การแยกวิเคราะห์ TSV และไฟล์ความกว้างคงที่ เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

นอกเหนือจาก CSV: รูปแบบไฟล์อื่น ๆ

ข้อมูลแบบตารางไม่ได้อยู่ในรูป CSV เสมอไป ไฟล์ที่คั่นด้วยแท็บ (TSV) ไฟล์ที่คั่นด้วยเครื่องหมายไปป์ และไฟล์รูปแบบความกว้างคงที่ (FWF) ล้วนพบได้ทั่วไปในข้อมูลภาครัฐ ระบบเก่า และฐานข้อมูลทางวิทยาศาสตร์ แพ็กเกจ readr รองรับรูปแบบเหล่านี้ทั้งหมดด้วยไวยากรณ์ที่สอดคล้องกัน

library(readr)

# readr's flat file readers:
# read_csv()    - comma-separated
# read_csv2()   - semicolon-separated (European)
# read_tsv()    - tab-separated
# read_delim()  - any delimiter
# read_fwf()    - fixed-width format
# read_lines()  - raw text, one line per element

cat('All readr functions return tibbles with the same interface!')

read_tsv() — ค่าที่คั่นด้วยแท็บ

read_tsv() อ่านไฟล์ที่คั่นด้วยแท็บ โดยมีอาร์กิวเมนต์เดียวกับ read_csv() เช่น col_types, na และ skip เป็นต้น ควรใช้ TSV แทน CSV เมื่อข้อมูลมีเครื่องหมายจุลภาค เช่น ที่อยู่หรือคำอธิบาย

library(readr)

# Simulated TSV using \t as delimiter
tsv_data <- 'name\tscore\tcity
Alice Smith\t85\tNew York, NY
Bob Jones\t92\tLos Angeles, CA
Carol White\t78\tChicago, IL'

# Note: cities contain commas — TSV handles this cleanly
df <- read_tsv(tsv_data, show_col_types=FALSE)
print(df)

read_delim() — ตัวคั่นใด ๆ

read_delim(file, delim='|') รองรับตัวคั่นอักขระเดี่ยวทุกชนิด ไฟล์ที่คั่นด้วยเครื่องหมายไปป์ (|) พบได้ทั่วไปในคลังข้อมูลและไฟล์ส่งออกของหน่วยงานรัฐ เพราะเครื่องหมายไปป์แทบไม่ปรากฏในข้อมูลจริง

library(readr)

# Pipe-delimited data
pipe_data <- 'ID|Name|Department|Salary
1|Alice Smith|Engineering|95000
2|Bob Jones|Marketing|72000
3|Carol White|HR|65000'

df <- read_delim(pipe_data, delim='|', show_col_types=FALSE)
print(df)

read_delim() สำหรับไฟล์ที่คั่นด้วยอัฒภาค

ไฟล์ CSV ของยุโรปมักใช้เครื่องหมายอัฒภาคเป็นตัวคั่นและใช้จุลภาคเป็นเครื่องหมายทศนิยม read_csv2() เป็นทางลัดสำหรับ read_delim(delim=';', locale=locale(decimal_mark=',')) หรือคุณจะกำหนดค่า read_delim() โดยตรงก็ได้

library(readr)

# European-style: semicolon delimiter, comma decimal
european_data <- 'name;price;quantity
Widget;9,99;100
Gadget;24,50;50
Sprocket;4,75;200'

# Method 1: read_csv2() shortcut
df1 <- read_csv2(european_data, show_col_types=FALSE)
print(df1)

# Method 2: explicit read_delim
# read_delim(data, delim=';', locale=locale(decimal_mark=','))

read_fwf() — รูปแบบความกว้างคงที่

ไฟล์ความกว้างคงที่ไม่มีตัวคั่น โดยระบุคอลัมน์จากตำแหน่งอักขระ มักพบในไฟล์ส่งออกจากเมนเฟรมรุ่นเก่าและข้อมูลภาครัฐ ใช้ fwf_widths() เพื่อระบุความกว้างคอลัมน์ หรือใช้ fwf_cols() เพื่อระบุตำแหน่งเริ่มต้นและสิ้นสุด

library(readr)

# Fixed-width data (positions matter!)
fwf_data <- 'Alice    085NYC      
Bob      092LA       
Carol    078Chicago  '

# Column widths: name=9, score=3, city=10
df <- read_fwf(
  fwf_data,
  col_positions = fwf_widths(
    widths = c(9, 3, 10),
    col_names = c('name','score','city')
  ),
  show_col_types = FALSE
)

print(df)

fwf_positions() สำหรับคอลัมน์เริ่มต้นและสิ้นสุด

fwf_positions(start, end, col_names) ระบุตำแหน่งเริ่มต้นและสิ้นสุดของอักขระอย่างแน่นอน (เริ่มนับดัชนีจาก 1) วิธีนี้แม่นยำเมื่อความกว้างคอลัมน์แตกต่างกัน หรือต้องการข้ามบางคอลัมน์โดยไม่ระบุคอลัมน์เหล่านั้น

library(readr)

# Another fixed-width example using start/end positions
fwf_data <- '001ALICE   02024-01-15
002BOB     01   2024-02-20
003CAROL   03   2024-03-10'

df <- read_fwf(
  fwf_data,
  col_positions = fwf_positions(
    start = c(1, 4, 11, 14),
    end   = c(3, 10, 12, 23),
    col_names = c('id','name','score','date')
  ),
  show_col_types = FALSE
)

print(df)

fwf_empty() — ตรวจหาความกว้างโดยอัตโนมัติ

fwf_empty(file, col_names) จะพยายามตรวจหาขอบเขตคอลัมน์โดยอัตโนมัติจากช่องว่างระหว่างข้อมูล ให้ระบุชื่อคอลัมน์แยกต่างหาก วิธีนี้ทำงานได้ดีที่สุดกับไฟล์ FWF ที่จัดรูปแบบไว้อย่างเรียบร้อยและมีระยะห่างสม่ำเสมอ

library(readr)

# Well-spaced fixed-width data
fwf_data <- 'name     score  grade
Alice    85     B
Bob      92     A
Carol    78     C
Dave     88     B'

# Auto-detect column positions from whitespace
df <- read_fwf(
  fwf_data,
  col_positions = fwf_empty(fwf_data, col_names=c('name','score','grade')),
  show_col_types = FALSE
)

print(df)

read_lines() — การแยกวิเคราะห์ข้อความดิบ

read_lines(file) อ่านไฟล์ข้อความทีละบรรทัดและส่งคืนเวกเตอร์อักขระ นี่เป็นฟังก์ชันอ่านข้อมูลระดับพื้นฐานที่สุด ควรใช้เมื่อจำเป็นต้องประมวลผลบรรทัดล่วงหน้าก่อนแยกวิเคราะห์ เช่น กรองความคิดเห็นหรือจัดการรูปแบบที่ไม่สม่ำเสมอ

library(readr)

# Read lines and filter manually
raw_text <- '# Comment line
# Another comment
name,score
Alice,85
Bob,92'

lines <- read_lines(raw_text)
print(lines)

# Filter out comment lines
clean_lines <- lines[!startsWith(lines, '#')]
df <- read_csv(paste(clean_lines, collapse='\n'), show_col_types=FALSE)
print(df)

read_lines() สำหรับการตรวจสอบทีละส่วน

read_lines(file, n_max=10) จะแสดงตัวอย่างเพียงไม่กี่บรรทัดแรกของไฟล์ข้อความใด ๆ ก่อนอ่านไฟล์ทั้งหมด วิธีนี้มีประโยชน์สำหรับวินิจฉัยปัญหาการเข้ารหัส ค้นหาแถวส่วนหัวจริง หรือตรวจหาชนิดตัวคั่น

library(readr)

# Preview first few lines before reading
sample_file <- 'METADATA: version 1.2
DATE: 2024-01-15
---
id,name,value
1,Alice,100
2,Bob,200'

# Inspect to find where the data starts
preview <- read_lines(sample_file, n_max=4)
print(preview)
# From this we know: skip=3, then read as CSV

การจัดการปัญหาการเข้ารหัส

อักขระที่ไม่ใช่ ASCII เช่น อักขระที่มีเครื่องหมายกำกับเสียงหรืออักษรที่ไม่ใช่ละติน จำเป็นต้องระบุการเข้ารหัสที่ถูกต้อง ใช้ locale(encoding='latin1') หรือ locale(encoding='UTF-8') ภายใน read_csv() หรือ read_delim() ค่าเริ่มต้นคือ UTF-8

library(readr)

# Detect encoding of a file
# readr::guess_encoding('file.csv')  # Returns likely encodings

# Specify encoding explicitly
# df <- read_csv('data_latin1.csv',
#   locale = locale(encoding = 'latin1'))

# For UTF-8 with BOM (common in Windows exports):
# df <- read_csv('data_utf8bom.csv',
#   locale = locale(encoding = 'UTF-8-BOM'))

cat('Encoding matters for accented chars: \xc3\xa9 (UTF-8 for e-acute)\n')
print(guess_encoding(chartr('\xe9','e','caf\xe9')))

การเลือกฟังก์ชันอ่านข้อมูลที่เหมาะสม

คู่มือฉบับย่อสำหรับเลือกฟังก์ชัน readr ที่ถูกต้อง:

  • จุลภาค → read_csv()
  • อัฒภาคและทศนิยมแบบยุโรป → read_csv2()
  • แท็บ → read_tsv()
  • ตัวคั่นอื่น ๆ → read_delim(delim='|')
  • ตำแหน่งคงที่ → read_fwf()
  • ตรวจสอบข้อมูลดิบ → read_lines()
library(readr)

# Quick comparison of delimiters
csv_data  <- 'a,b,c\n1,2,3'
tsv_data  <- 'a\tb\tc\n1\t2\t3'
pipe_data <- 'a|b|c\n1|2|3'

read_csv(csv_data, show_col_types=FALSE)
read_tsv(tsv_data, show_col_types=FALSE)
read_delim(pipe_data, delim='|', show_col_types=FALSE)

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ฟังก์ชัน readr ใดเหมาะที่สุดสำหรับอ่านไฟล์ที่กำหนดคอลัมน์ด้วยตำแหน่งอักขระคงที่ (ไม่มีตัวคั่น)

สรุป: ไฟล์ TSV และไฟล์ความกว้างคงที่

ประเด็นสำคัญเกี่ยวกับรูปแบบไฟล์แบบแบนที่ไม่ใช่ CSV:

  • read_tsv() — คั่นด้วยแท็บ เหมาะเมื่อข้อมูลมีเครื่องหมายจุลภาค
  • read_delim(delim='|') — รองรับตัวคั่นอักขระเดี่ยวทุกชนิด
  • read_csv2() — คั่นด้วยอัฒภาคและใช้เครื่องหมายทศนิยมแบบยุโรป
  • read_fwf(fwf_widths(c(10,5,8))) — ความกว้างคงที่ตามความกว้างคอลัมน์
  • read_fwf(fwf_positions(start, end)) — ความกว้างคงที่ตามตำแหน่งที่แน่นอน
  • read_lines(file, n_max=10) — ตรวจสอบบรรทัดดิบก่อนแยกวิเคราะห์
  • ฟังก์ชันทั้งหมดใช้อาร์กิวเมนต์ col_types, na, skip และ locale() ร่วมกัน
library(readr)

# Pipe-delimited with custom NA values
df <- read_delim(
  'ID|Name|Score|City
  1|Alice|85|NYC
  2|Bob|N/A|N/A
  3|Carol|78|Chicago',
  delim = '|',
  na = c('', 'NA', 'N/A'),
  show_col_types = FALSE
)

print(df)
print(colSums(is.na(df)))

คำถามที่พบบ่อย

บทเรียน “การแยกวิเคราะห์ TSV และไฟล์ความกว้างคงที่” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การแยกวิเคราะห์ TSV และไฟล์ความกว้างคงที่” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การแยกวิเคราะห์ TSV และไฟล์ความกว้างคงที่”

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

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

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

บทเรียน “การแยกวิเคราะห์ TSV และไฟล์ความกว้างคงที่” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การอ่านไฟล์ CSV ด้วย read_csv()
  2. การแยกวิเคราะห์ TSV และไฟล์ความกว้างคงที่
  3. การนำเข้าไฟล์ Excel ด้วย readxl
  4. การเขียนข้อมูลในหลายรูปแบบ
← กลับไปที่ R Academy