messenger_logo
Liên hệ qua Messenger
SciEco

Hiểu về nhập xuất dữ liệu trong R: Làm việc với tệp CSV và Excel

I
IEFPA
Ngày viết: 18/09/2026

Khi học R, hầu hết mọi người tập trung vào các hàm, mô hình và trực quan hóa. Tuy nhiên, nhiều vấn đề thực tế bắt đầu sớm hơn rất nhiều — ở giai đoạn nhập dữ liệu — và kết thúc muộn hơn — ở việc xuất kết quả.

Nếu dữ liệu bị đọc sai, không phương pháp thống kê nào có thể cứu vãn được phân tích.

Trong bài viết này, chúng ta tập trung vào logic của việc nhập và xuất dữ liệu trong R, sử dụng tệp CSV và Excel. Thay vì học vẹt các hàm, chúng ta sẽ xây dựng một mô hình tư duy về cách R tương tác với tệp tin.

Tại sao nhập xuất dữ liệu lại quan trọng

Phân tích dữ liệu là một quy trình làm việc:

1Nguồn dữ liệu → Nhập → Phân tích → Kết quả → Xuất → Chia sẻ

Lỗi thường xảy ra ngay tại giai đoạn nhập:

Hậu quả? Một mô hình chạy hoàn hảo — nhưng trên dữ liệu sai.

CSV so với Excel: Không phải sự cạnh tranh

Trước khi chạm vào R, chúng ta nên làm rõ sự khác biệt giữa hai định dạng tệp.

Tệp CSV

Ví dụ:

1total_bill,tip,sex
216.99,1.01,Female

Tệp Excel

Tư duy cốt lõi: CSV là định dạng vận chuyển dữ liệu. Excel là định dạng giao tiếp và trình bày.

Thư mục làm việc: Nơi R thực sự tìm kiếm

Một trong những lỗi phổ biến nhất của người mới không liên quan đến cú pháp R.

R không quét toàn bộ máy tính để tìm tệp. Nó chỉ nhìn vào thư mục làm việc (working directory) của mình.

1getwd()

Lệnh này cho biết R đang nhìn ở đâu.

Nếu tệp tồn tại trên máy tính nhưng nằm ngoài thư mục này, R xử lý như thể tệp đó không tồn tại. Đó là lý do các lỗi như:

1cannot open the connection

thường chỉ ra vấn đề về đường dẫn, chứ không phải lỗi code.

Bộ dữ liệu ví dụ: tips

Trong suốt bài viết, chúng ta sử dụng một bộ dữ liệu duy nhất: tips.

Nguồn dữ liệu: https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv

Đọc tệp CSV: Logic cốt lõi

Khi R đọc tệp CSV, nó cần câu trả lời cho bốn câu hỏi:

  1. Cột được phân tách như thế nào?
  2. Dòng đầu tiên có phải tiêu đề không?
  3. Dấu thập phân là gì?
  4. Văn bản nên được hiểu như thế nào?

Các câu trả lời này được cung cấp thông qua tham số hàm.

read.table(): Nền tảng

Tất cả các hàm đọc CSV trong R cơ bản (base R) đều xây dựng dựa trên read.table().

1tips <- read.table(
2  file = "tips.csv",
3  header = TRUE,
4  sep = ",",
5  dec = ".",
6  stringsAsFactors = FALSE
7)

Hiểu được hàm này đồng nghĩa với hiểu được nhập CSV trong R.

read.csv() và các giả định của nó

read.csv() chỉ là một tiện ích (shortcut) cho trường hợp phổ biến:

1tips <- read.csv("tips.csv")

Hàm này hoạt động hoàn hảo — nếu các giả định khớp với tệp.

Phần nguy hiểm? R có thể không báo lỗi ngay cả khi giả định sai.

Những lỗi nguy hiểm nhất là những lỗi thầm lặng.

read.csv2() và sự khác biệt theo khu vực

Trong nhiều tập dữ liệu Châu Âu:

1total_bill;tip;sex
216,99;1,01;Female

Đối với cấu trúc này, read.csv2() được thiết kế riêng.

1tips2 <- read.csv2("tips_semicolon.csv")

Lưu ý quan trọng: Ngay cả khi thập phân dùng chấm, read.csv2() vẫn có thể chạy được trong một số trường hợp — nhưng điều này không được đảm bảo.

Cách tiếp cận đúng:

Luôn kiểm tra cấu trúc tệp trước khi chọn hàm.

Ghi tệp CSV từ R

Phân tích dữ liệu hiếm khi kết thúc trong R. Kết quả cần được chia sẻ dưới dạng tệp.

Ghi CSV phân tách bằng dấu phẩy

1write.csv(tips, "tips_comma.csv", row.names = FALSE)

Ghi CSV phân tách bằng dấu chấm phẩy

1write.csv2(tips, "tips_semicolon.csv", row.names = FALSE)

Việc chọn định dạng đúng phụ thuộc vào người sẽ đọc tệp tiếp theo.

Tại sao chúng ta vẫn cần Excel

CSV vượt trội về mặt kỹ thuật ở nhiều khía cạnh. Tuy nhiên, Excel vẫn chiếm ưu thế trong thực tế.

Tại sao?

Excel không phải công cụ phân tích — nhưng nó là công cụ phân phối mạnh mẽ.

Làm việc với Excel trong R: openxlsx

Gói openxlsx cho phép thao tác Excel mà không cần cài đặt Excel trên máy.

1library(openxlsx)

Ghi tệp Excel đơn giản

1write.xlsx(tips, "tips.xlsx", sheetName = "tips")

Đọc từ Excel

1tips_excel <- read.xlsx("tips.xlsx", sheet = 1)

Nhiều trang tính: Một báo cáo nhỏ

Excel tỏa sáng khi tổ chức các bảng liên quan.

1summary_tips <- aggregate(tip ~ day, data = tips, mean)
2
3wb <- createWorkbook()
4
5addWorksheet(wb, "Raw Data")
6writeData(wb, "Raw Data", tips)
7
8addWorksheet(wb, "Summary")
9writeData(wb, "Summary", summary_tips)
10
11saveWorkbook(wb, "tips_report.xlsx", overwrite = TRUE)

Một tệp.
Nhiều góc nhìn.
Cấu trúc sạch sẽ.

Những lỗi thường gặp cần lưu ý

Hầu hết lỗi không do R gây ra, mà do giả định sai:

Một thói quen tốt sau mỗi lần nhập dữ liệu:

1head(data)
2str(data)
3summary(data)

Lời kết

Nếu bạn có thể:

thì bạn đã vượt qua một trong những ngưỡng cửa quan trọng nhất của phân tích dữ liệu.

Giá trị đắt giá

Đừng tin tưởng cمي vào mặc định. Hãy mở tệp tin bằng trình soạn thảo văn bản (như Notepad, VS Code) để nhìn thấy ký tự phân tách, dấu thập phân và tiêu đề trước khi viết một dòng code R nào. Năm phút kiểm tra tệp tin tiết kiệm được hàng giờ gỡ lỗi mô hình sau này.

Câu hỏi tư duy: Bạn nhận được một tệp .csv từ đồng nghiệp Đức. Bạn chạy read.csv() và thấy cột revenue toàn là giá trị nguyên như 123456 (thực tế là 1.234,56 Euro). Vấn đề nằm ở đâu và bạn sẽ sửa như thế nào chỉ bằng một lệnh duy nhất?


Bài viết khác
Trong hành trình học hỏi về khoa học dữ liệu, có những khái niệm như thể được khắc sâu vào trí nhớ — cho đến khi bạn bất ngờ quên sạch. Nhưng rồi, khi quay lại đọc lại những dòng viết cũ, một “rãnh” nhỏ lại được khơi lại, giúp ta trôi theo dòng chảy kiến thức một cách nhẹ nhàng. Có lẽ chính vì thế mà người ta mới nói “get back in the groove” — không phải vì nhạc funk, mà vì sự trôi chảy của tư duy đã từng tồn tại. Một trong những khái niệm như thế là Gaussian Process (GP) — một công cụ mạnh mẽ trong học thống kê, đặc biệt khi đối mặt với hàm mục tiêu bí ẩn, đắt đỏ để đánh giá. Hôm nay, chúng ta sẽ cùng nhau hồi sinh lại khái niệm này, đi sâu hơn một bước vào lĩnh vực tối ưu hóa Bayes (Bayesian Optimisation) — nơi GP không chỉ mô hình hóa hàm số, mà còn lên kế hoạch cho những bước tiếp theo. Chúng ta sẽ dùng R như vũ khí chính, cùng với Stan để triển khai mô hình Bayes chính xác, và một chút code để chứng minh rằng, dù hàm là bí ẩn, ta vẫn có thể tìm ra hướng đi thông minh.
Bài viết này tóm tắt nội dung video hướng dẫn cách xây dựng một gói R tích hợp mã C++ và thư viện Armadillo. Video tập trung vào quy trình trên Windows — hệ điều hành phổ biến nhất בקרב người dùng R — bắt đầu từ cài đặt R và RTools (công cụ biên dịch bắt buộc cho C++), sau đó trình bày cách sử dụng mẫu gói có sẵn kèm theo armadillo4r. Chuẩn bị môi trường trên Windows Trước khi viết bất kỳ dòng mã C++ nào, máy tính cần bộ công cụ biên dịch hoạt động. Trên Windows, nghĩa là bạn phải cài đặt RTools phiên bản tương ứng với bản R đang dùng. Video minh hoạ từng bước: Tải bản cài đặt R mới nhất từ CRAN.
SciEco
Science for Economics
Định hướng đào tạo phân tích dữ liệu, xây dựng chính sách, tối ưu hoá danh mục tài chính cá nhân và dự báo thị trường.
Liên hệ
Địa chỉ: Số 60, ngõ 41, Phố Thái Hà, Trung Liệt, Đống Đa, Hà Nội (Google Map)
Email: science.for.economics@gmail.com
Hotline: 03.57.94.7680 (Mrs. Hà)
Mạng xã hội