การอ่านไฟล์ CSV ด้วย read_csv()
นำเข้าไฟล์ที่มีตัวคั่น พร้อมตัวเลือกเดาชนิดคอลัมน์ ข้ามข้อมูล และการเข้ารหัส
การอ่านไฟล์ CSV ด้วย read_csv() เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงใช้ readr แทน Base R
Base R มี read.csv() แต่ฟังก์ชัน read_csv() ในแพ็กเกจ readr ทำงานได้เร็วกว่า ส่งคืน tibble แทน data frame เดาชนิดข้อมูลเริ่มต้นได้ดีกว่า และแสดงข้อความที่ให้ข้อมูลเกี่ยวกับชนิดของคอลัมน์ที่ตรวจพบ
library(readr)
# read_csv() vs read.csv():
# 1. Returns a tibble (prints nicely, faster subsetting)
# 2. Does NOT convert strings to factors by default
# 3. Shows column specification message
# 4. Faster for large files
# Example with a simple inline CSV:
df <- read_csv('name,score,grade
Alice,85,B
Bob,92,A
Carol,78,C')
print(df)
print(class(df))read_csv() จากเส้นทางไฟล์
การใช้งานที่พบบ่อยที่สุดคือส่งสตริงเส้นทางไฟล์ให้ read_csv() ฟังก์ชันจะตรวจหาตัวคั่นว่าเป็นเครื่องหมายจุลภาคโดยอัตโนมัติ อ่านแถวแรกเป็นส่วนหัว และเดาชนิดของคอลัมน์จาก 1,000 แถวแรก
library(readr)
# Reading from a file path (illustrative — file not present)
# df <- read_csv('data/sales_2024.csv')
# Reading from a URL also works:
# df <- read_csv('https://example.com/data.csv')
# Using a literal inline string for demonstration:
df <- read_csv('region,q1,q2,q3
East,100,120,115
West,200,195,210
North,80,85,90')
print(df)col_types — การระบุชนิดคอลัมน์
ใช้ col_types เพื่อแทนที่การเดาชนิดข้อมูลของ readr โดยส่งสตริงแบบย่อ (หนึ่งอักขระต่อหนึ่งคอลัมน์: c=อักขระ, d=เลขทศนิยม, i=จำนวนเต็ม, l=ตรรกะ, D=วันที่, _=ข้าม) หรือข้อกำหนดจาก cols()
library(readr)
df <- read_csv('id,date,amount,active
1,2024-01-15,99.99,TRUE
2,2024-02-20,149.50,FALSE
3,2024-03-10,75.00,TRUE',
# Compact: integer, Date, double, logical
col_types = 'iDdl')
print(df)
cat('\nColumn types:\n')
print(sapply(df, class))cols() สำหรับการระบุชนิดอย่างชัดเจน
หากต้องการควบคุมมากขึ้น ให้ใช้ cols() เพื่อระบุชนิดของแต่ละคอลัมน์ตามชื่อ ใช้ฟังก์ชันตัวรวบรวม ได้แก่ col_double(), col_character(), col_integer(), col_date(format=), col_skip() และ col_guess()
library(readr)
df <- read_csv('id,name,score,date
1,Alice,85.5,2024-01-15
2,Bob,92.0,2024-02-20
3,Carol,78.3,2024-03-10',
col_types = cols(
id = col_integer(),
name = col_character(),
score = col_double(),
date = col_date(format = '%Y-%m-%d')
))
print(df)
print(class(df$date))อาร์กิวเมนต์ skip และ n_max
skip=n จะข้าม n บรรทัดแรกก่อนเริ่มอ่าน (เหมาะสำหรับข้อมูลเมทาดาทาหรือส่วนหัวที่เป็นความคิดเห็น) ส่วน n_max=n จะอ่านข้อมูลไม่เกิน n แถว เหมาะสำหรับดูตัวอย่างไฟล์ขนาดใหญ่หรือโหลดเฉพาะส่วนแรก
library(readr)
# File with metadata in first 2 lines
# (simulated with literal string)
df <- read_csv('# Generated 2024-01-15
# Source: internal DB
name,score,grade
Alice,85,B
Bob,92,A
Carol,78,C
Dave,88,B',
skip = 2, # Skip the 2 comment lines
n_max = 3 # Read only 3 data rows
)
print(df)อาร์กิวเมนต์ na — การกำหนดค่าที่หายไป
โดยค่าเริ่มต้น read_csv() จะถือว่าสตริงว่างและ NA เป็นค่าที่หายไป ใช้อาร์กิวเมนต์ na เพื่อระบุสตริงเพิ่มเติมที่ควรอ่านเป็น NA ตัวอย่างที่พบบ่อย ได้แก่ 'N/A', 'NULL', '-999' และ '.'
library(readr)
df <- read_csv('name,score,city
Alice,85,NYC
Bob,N/A,NULL
Carol,78,.
Dave,-999,Chicago',
na = c('', 'NA', 'N/A', 'NULL', '.', '-999')
)
print(df)
cat('NAs per column:\n')
print(colSums(is.na(df)))col_names — ชื่อคอลัมน์ที่กำหนดเอง
ตั้งค่า col_names = FALSE เมื่อไฟล์ไม่มีแถวส่วนหัว readr จะตั้งชื่อคอลัมน์เป็น X1, X2 และอื่น ๆ โดยอัตโนมัติ หรือส่งเวกเตอร์อักขระให้ col_names เพื่อระบุชื่อที่กำหนดเองและข้ามแถวส่วนหัว
library(readr)
# File without headers
df <- read_csv('Alice,85,NYC
Bob,92,LA
Carol,78,Chicago',
col_names = c('name','score','city')
)
print(df)
# auto-names when no header:
df2 <- read_csv('1,2,3
4,5,6', col_names = FALSE)
print(df2)locale() — การจัดการรูปแบบที่ไม่เป็นมาตรฐาน
locale() ควบคุมวิธีที่ readr ตีความรูปแบบเฉพาะตามภูมิภาค ได้แก่ เครื่องหมายทศนิยม (',' ในข้อมูลยุโรป) รูปแบบวันที่ การเข้ารหัส และเครื่องหมายแบ่งหลัก ส่งค่าให้กับ read_csv(locale=...)
library(readr)
# European-style CSV: semicolons as delimiters, comma as decimal
# read_csv2() is shorthand for this locale
df <- read_csv2('name;price;qty
Alice;9,99;100
Bob;24,50;50',
locale = locale(decimal_mark=',')
)
print(df)
# For dates in non-ISO format:
parse_date('15/01/2024', format='%d/%m/%Y')progress และ show_col_types
สำหรับไฟล์ขนาดใหญ่ read_csv() จะแสดงแถบความคืบหน้า ตั้งค่า progress=FALSE เพื่อไม่ให้แสดงแถบดังกล่าว (มีประโยชน์ในสคริปต์) ส่วน show_col_types=FALSE จะปิดข้อความชนิดคอลัมน์เมื่อคุณตรวจสอบชนิดเหล่านั้นแล้ว
library(readr)
# Suppress progress and type messages for production scripts
df <- read_csv(
'a,b,c
1,x,TRUE
2,y,FALSE',
show_col_types = FALSE,
progress = FALSE
)
print(df)problems() — การวินิจฉัยความล้มเหลวในการแยกวิเคราะห์
เมื่อ readr พบค่าที่ไม่ตรงกับชนิดข้อมูลที่คาดไว้ ระบบจะแทนค่าดังกล่าวด้วย NA และบันทึกคำเตือนไว้ เรียกใช้ problems(df) เพื่อตรวจสอบว่าแถวและคอลัมน์ใดมีปัญหา รวมถึงค่าดั้งเดิมคืออะไร
library(readr)
# Intentional type mismatch: 'N/A' in numeric column
df <- suppressWarnings(read_csv(
'id,score
1,85
2,N/A
3,92',
col_types = cols(score = col_double())
))
print(df)
print(problems(df))การอ่านหลายไฟล์ด้วย map()
ใช้ readr ร่วมกับ purrr::map() เพื่ออ่านและรวมแถวจากไฟล์ CSV หลายไฟล์ในขั้นตอนเดียว รูปแบบนี้จำเป็นอย่างยิ่งสำหรับการประมวลผลข้อมูลรายเดือนหรือรายไตรมาสที่จัดเก็บแยกเป็นหลายไฟล์
library(readr)
library(purrr)
library(dplyr)
# Simulated: read and bind multiple CSV files
files <- c('q1.csv', 'q2.csv', 'q3.csv')
# In practice:
# all_data <- map_df(files, read_csv, show_col_types=FALSE)
# Demonstration with inline data:
q1 <- read_csv('month,sales\nJan,100\nFeb,120', show_col_types=FALSE)
q2 <- read_csv('month,sales\nApr,130\nMay,145', show_col_types=FALSE)
bind_rows(list(q1=q1, q2=q2), .id='quarter')ตรวจสอบความเข้าใจอย่างรวดเร็ว
คุณจะบอก read_csv() ได้อย่างไรว่า ค่า 'N/A' และ '-99' ควรถือเป็นค่าที่หายไป (NA)
สรุป: read_csv() กับ readr
ประเด็นสำคัญเกี่ยวกับการอ่านไฟล์ CSV ด้วย readr:
- read_csv('file.csv') — อ่าน CSV ส่งคืน tibble และเดาชนิดคอลัมน์
- col_types = 'idcl' หรือ cols(x=col_double()) — การระบุชนิดอย่างชัดเจน
- skip=n — ข้ามแถวส่วนหัวหรือเมทาดาทา; n_max=n — จำกัดจำนวนแถวที่อ่าน
- na = c('N/A','NULL') — ถือว่าสตริงเพิ่มเติมเป็น NA
- locale(decimal_mark=',') — รองรับรูปแบบตัวเลขแบบยุโรป
- show_col_types=FALSE — ไม่แสดงข้อมูลชนิดในสคริปต์
- problems(df) — ตรวจสอบความล้มเหลวในการแยกวิเคราะห์
- ใช้ร่วมกับ map_df(files, read_csv) สำหรับหลายไฟล์
library(readr)
# Production-ready read_csv() call
df <- read_csv(
'name,score,city,active
Alice,85,NYC,TRUE
Bob,N/A,LA,FALSE
Carol,78,NULL,TRUE',
col_types = cols(
name = col_character(),
score = col_double(),
city = col_character(),
active = col_logical()
),
na = c('', 'NA', 'N/A', 'NULL'),
show_col_types = FALSE
)
print(df)คำถามที่พบบ่อย
บทเรียน “การอ่านไฟล์ CSV ด้วย read_csv()” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การอ่านไฟล์ CSV ด้วย read_csv()” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การอ่านไฟล์ CSV ด้วย read_csv()”
นำเข้าไฟล์ที่มีตัวคั่น พร้อมตัวเลือกเดาชนิดคอลัมน์ ข้ามข้อมูล และการเข้ารหัส คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การอ่านไฟล์ CSV ด้วย read_csv()” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม
ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การอ่านไฟล์ CSV ด้วย read_csv()
- การแยกวิเคราะห์ TSV และไฟล์ความกว้างคงที่
- การนำเข้าไฟล์ Excel ด้วย readxl
- การเขียนข้อมูลในหลายรูปแบบ